SQL List Değişken Tanımlama

SQL List Değişken Tanımlama

MS SQL de scalar tek değer tutan değişken tanımlamanın yanı sıra çok boyutlu veya list değişkende tanımlayabiliriz. Bazı durumlarda SQL sorgu sonucu elde edilen veri setinin bir tabloya aktarmak ve bu tabloyu tek başına veya başka tablolar ile join yaparak kullanma ihtiyacı olabilir. Bazı durumlarda elde edilen sorgu sonucu INTO ile bir tabloya doldurulabilir. Ancak hem tablo oluşturma yetkisi gerekli hemde bu tabloları silmek gerekli olduğu için bu yöntem çoğu zaman kullanışlı bir yöntem değildir. Diğer bir yöntemde INTO #GECICI_TABLO_ADI ifadesi ile bir yerel geçici bir tablo oluşturmaktır. Bu geçici tablo kullanıcı oturumu kapatınca silinir. Bu yöntem kalıcı tablo oluşturma yönteme göre daha avantajlıdır. En ideal yöntem ise list tipinde bir değişken oluşturup, kullanmak böylece tablo oluşturma yetkisine ve fiziksel olarak tablo oluşturmaya ihtiyaç kalmaz.

List türü değişken olarak tanımladığımız tablolarımızı fiziki tablolarımız ile join gibi işlemler ile beraber kullanabiliriz.

---SCALAR DEĞİŞKEN
DECLARE @ADI AS NVARCHAR(10)
SET @ADI='DENEME'
SELECT @ADI

--SONUÇ
DENEME

---1 FİZİKİ TABLO

SELECT ADI,SOYADI INTO TMP_TABLO FROM TABLO WHERE ID IN (1,2)
SELECT * FROM TMP_SIL

---FİZİKİ GEÇİCİ TABLO OLUŞTURMA
SELECT ADI,SOYADI INTO #TMP_TABLO FROM TABLO WHERE ID IN (1,2)
SELECT * FROM #TMP_TABLO

---LİST DEĞİŞKEN
DECLARE @MUSTERI TABLE (ID INT,ADI NVARCHAR(10),SOYADI VARCHAR(20))
INSERT INTO @MUSTERI
VALUES
(1,'DENEME01','DENEK01') ,
(2,'DENEME02','DENEK02') ,
(3,'DENEME02','DENEK03')
SELECT ID,ADI,SOYADI FROM @MUSTERI 

ID ADI SOYADI
1 DENEME01 DENEK01
2 DENEME02 DENEK02
3 DENEME02 DENEK03

---SQL LIST VERI TIPI  Aşağıdaki sorgular mutlaka Declare ifadeleri ile beraber çalıştırılması gerek.

DECLARE @Gunler TABLE(Sira INT,Gun VARCHAR(40))
DECLARE @GunlerEnglish TABLE(Sira INT,GunENG VARCHAR(40))

INSERT INTO @Gunler
VALUES
(1,'Pazartesi') ,
(2,'Salı') ,
(3,'Çarşamba') ,
(4,'Perşembe'),
(5,'Cuma'),
(6,'Cumartesi'),
(7,'Pazar')

INSERT INTO @GunlerEnglish
VALUES
(1,'Monday') ,
(2,'Tuesday'),
(3,'Wednesday') ,
(4,'Friday'),
(5,'Friday'),
(6,'Saturday'),
(7,'Sunday')

SELECT * FROM @Gunler

Sira Gun
1 Pazartesi
2 Sali
3 Çarsamba
4 Persembe
5 Cuma
6 Cumartesi
7 Pazar

SELECT * FROM @GunlerEnglish 

Sira GunENG
1 Monday
2 Tuesday
3 Wednesday
4 Friday
5 Friday
6 Saturday
7 Sunday

SELECT [@Gunler].Sira,Gun,GunENG
FROM @Gunler
INNER JOIN @GunlerEnglish ON [@Gunler].Sira=[@GunlerEnglish].Sira 

Sira Gun GunENG
1 Pazartesi Monday
2 Sali Tuesday
3 Çarsamba Wednesday
4 Persembe Friday
5 Cuma Friday
6 Cumartesi Saturday
7 Pazar Sunday


İlgili Yazılar