Değişken tanımlamak ve değer atamak
Değişkenler @ ile başlar ve DECLARE ile tipiyle birlikte tanımlanır. Değer, SET veya SELECT @x = ... ile atanır. PRINT Mesajlar sekmesine yazar.
DECLARE @ortalama DECIMAL(12, 2); SELECT @ortalama = AVG(price) FROM products; PRINT 'Ortalama fiyat: ' + CAST(@ortalama AS VARCHAR(20)); SELECT name, price FROM products WHERE price > @ortalama ORDER BY price DESC;
SET @x = ... | SELECT @x = ... | |
|---|---|---|
| Birden çok değişken | Tek değişken | Aynı anda birden çok |
| Alt sorgu birden çok satır döndürürse | Hata | Son satırın değeri (sessizce!) |
| Hiç satır yoksa | NULL atanır | Değişken eski değerini korur |
IF / ELSE ve BEGIN / END
DECLARE @stoksuz INT = (SELECT COUNT(*) FROM products WHERE stock = 0);
IF @stoksuz > 0
BEGIN
PRINT CAST(@stoksuz AS VARCHAR(10)) + ' ürünün stoğu bitmiş.';
SELECT name FROM products WHERE stock = 0;
END
ELSE
PRINT 'Tüm ürünler stokta.';
IF yalnızca kendisinden sonraki tek ifadeyi kontrol eder; birden çok ifade için BEGIN ... END bloğu gerekir.
WHILE döngüsü ve tablo değişkeni
DECLARE @yil INT = 2022;
DECLARE @ozet TABLE (yil INT, siparis INT);
WHILE @yil <= 2024
BEGIN
INSERT INTO @ozet (yil, siparis)
SELECT @yil, COUNT(*) FROM orders WHERE YEAR(order_date) = @yil;
SET @yil += 1;
END;
SELECT * FROM @ozet;
Döngü yerine kümeSQL küme tabanlı bir dildir. Yukarıdaki döngü tek bir
GROUP BY YEAR(order_date) ile yazılabilirdi ve milyonlarca satırda yüzlerce kat hızlı olurdu. WHILE'ı yönetim işleri ve parça parça işleme (batch) gibi durumlar için sakla.