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 |