Sql Server’da Değişken Kullanımı
Değişkenler(variables), belirli bir değeri veya ifadeyi geçici olarak (batch sorgu tamamlanana kadar veya stored procedure tamamlanana kadar) saklamak için kullanılır. Bu değişkenin değeri, çalıştırma süresince birden fazla kere değişebilir. Yaşam süresi, değişken tanımlandıktan sonra başlar ve batch kullanımı bittiğinde değişkenin kullanımı da bitmiş olur.

Şimdi değişkenlerin nasıl tanımlandığına bakalım.
Değişken Tanımlama
Bir değişkeni tanımlamak için bu değişkenin hangi veri tipinde olması gerektiğine kadar vermemiz gerekir. DECLARE ifadesiyle başlar, değişken ismi ve değişken tipi belirtilerek tanımlanmış olur. Değişken tanımlamayı özetlersek;
- Değişken DECLARE ifadesiyle tanımlanır.
- Değişken ismi @ işaretiyle başlar.
- Değişkenin bir tipi olmalıdır.
Syntax
DECLARE @degisken_ismi veri_tipi;
Examples
DECLARE @sayi INT;
DECLARE @name VARCHAR(20);
DECLARE @tarih DATETIME;
Örnekte görüldüğü gibi değişkenler kullanım amacına göre ve atanacak veri tipine göre farklı veri tipleri olarak tanımlanır. Değişkenlere atanabilecek birçok veri tipi bulunmakla beraber, çok kullanılanlardan bazıları INT, VARCHAR, NVARCHAR, DATE, DATETIME, DECIMAL şeklindedir. Veri tipleri için daha detaylı bilgiye şu yazımdan ulaşabilirsiniz.
Değişkenlere Değer Atama
Bir değişkene değer atamak için SET veya SELECT ifadeleri kullanılabilir. Yukarıda tanımladığımız değişkenlere şu şekilde değer atayabiliriz:
-- SET ile Değer atama
SET @sayi = 10;
SET @isim= 'Ali Veli';
SET @tarih = '2024-07-31';
-- SELECT ile Değer Atama
SELECT @sayi = 10;
SELECT @isim = 'Ali Veli';
SELECT @tarih = '2024-07-31'
Yukarıdaki örnekte gördüğümüz gibi her iki kullanımda da değişkenlere aynı değerler atanmış olur.
Değişkenlere, tanımlama anında da değer atama işlemi yapılabilir.
DECLARE @isim varchar(50) = 'Ali Veli'
SELECT @isim

Değişken adedi arttıkça, bazen herbiri için DECLARE ifadesini yazmak yerine bir defa yazmak tercih edilebilir.
DECLARE @sayi INT,
@isim VARCHAR(20),
@tarih DATETIME
SET @sayi = 10
SET @isim= 'Ali Veli'
SET @tarih = '2024-07-31'
select @sayi as Sayı,@isim as İsim, @tarih as Tarih

Bir değişkene sadece sabit değer atanmaz. İhtiyaçlara göre bazen bir fonksiyonun sonucu veya bir tablodan dönen sonuç da yine bu değişkenlere atanarak sorgu bloğu içerisinde kullanılabilir. Burada dikkat edilmesi gereken değişkene bir sorgu kümesi değil, bir adet sonuç set edilmelidir.
declare @ProductNumber varchar(10)
select @ProductNumber = ProductNumber
from Production.Product where ProductID = 1
select @ProductNumber as ProductNumber

Aynı işlemi bir sonuç kümesiyle yapmaya çalışırsak elde edeceğimiz sonuç şu şekilde olacaktır:
- Production.Product kümesindeki en son ProductNumber değeri @ProductNumber değişenine set edilecektir. Bu da yapacağımız işlemlerin veya hesaplamaların yanlış olmasına neden olacaktır.
declare @ProductNumber varchar(10)
select @ProductNumber = ProductNumber from Production.Product
select @ProductNumber as ProductNumber
select ProductNumber from Production.Product

Değişkenlerin Kullanılması
Değişkenler, değer atama haricinde de farklı kullanımları vardır;
Sorgu İçlerinde
Değer atanmış bir değişken sorgu içlerinde farklı yerlerde kullanılabilir:
-- SELECT
declare @CriticStokLevel int
set @CriticStokLevel = 500
select count(*)
from Production.Product
where SafetyStockLevel<=500
-- DELETE
declare @color varchar(10) = 'Black'
delete from Production.Product where Color = @color
-- INSERT
create table dbo.TestNames
(
FirstName varchar(50),
LastName varchar(50)
)
declare @firstName varchar(50),
@lastName varchar(50)
set @firstName ='Ali'
set @lastName = 'Veli'
Insert into dbo.TestNames (FirstName, LastName) values (@firstName,@lastName)
Döngü İşlemlerinde
WHILE veya Cursor gibi döngü işlemlerinde değişkenler kullanılabilir. Bu örnekte döngü içerisinde @sayi değişkeninin değeri 1 artırılır. Bu şekilde 1'den 10'a kadar olan sayılar yazdırılır.
DECLARE @sayi INT;
SET @sayi = 1;
WHILE @sayi <= 10
BEGIN
PRINT @sayi;
SET @sayi = @sayi + 1;
END;
Koşullu İfadelerde
IF/ELSE , CASE WHEN gibi koşullu ifadelerde de değişken kullanımı yapılabilir. Bu örnekte, @puan değişkeninin değerine göre 50'den büyük olanlar için Geçti, diğerleri için Kaldı ifadesi yazdırılabilir.
DECLARE @puan INT;
SET @puan = 85;
IF @puan >= 50
PRINT 'Geçti';
ELSE
PRINT 'Kaldı';
Matematiksel Hesaplamalarda
Matematiksel Hesaplamalar yapmak için de sık sık değişkenlere başvurulur. Aşağıdaki örnekte iki sayının değierini toplayıp 3. bir değişkene atama işlemi yapılmaktadır.
DECLARE @sayi1 INT, @sayi2 INT, @toplam INT;
SET @sayi1 = 5;
SET @sayi2 = 10;
SET @toplam = @sayi1 + @sayi2;
PRINT @toplam;
Dikkat
Bir tablodan gelen değeri değişkene set ederken değişkenin veri tipiyle sorgu sonucunun tiplerinin aynı olmasına dikkat etmek gerekir. Veri tiplerinin uyuşmadığı durumlarda, Sql Server veri’yi dönüştürerek farklı sonuçlar döndürebilir.
declare @sayi1 decimal(14,4),
@sayi2 int,
@name varchar(5),
@nameOrg varchar(50)
select @sayi1 = AVG(ListPrice) from Production.Product -- Decimal Variable
select @sayi2 = AVG(ListPrice) from Production.Product -- Int
select @name = Name from Production.Product where ProductID = 1 -- @name variable with only 5 character
select @nameOrg = Name from Production.Product where ProductID = 1 -- @name variable with only 5 character
select @sayi1 as Sayi1, @sayi2 as Sayi2, @name as Name, @nameOrg as NameOrg

Örneklerde görüldüğü gibi virgüllü sayı, tam sayıya, 15 karakterli bir veri 5 karakterli bir veriye dönüştürüldü.
SQL Server’da değişkenler, veri manipülasyonu ve dinamik SQL oluşturulması gibi birçok işlemde kritik bir rol oynar. Bu yazıda, değişkenlerin tanımlanması, değer atanması ve kullanımı hakkında temel bilgiler ve örnekler vermeye çalıştım. Değişkenleri etkili bir şekilde kullanarak SQL sorgularınızı daha dinamik ve esnek hale getirebilirsiniz.
Umarım bu blog yazısı, SQL Server’da değişkenlerin kullanımı hakkında faydalı bilgiler sağlamıştır. Sorularınız veya eklemek istedikleriniz varsa, yorumlar bölümünde paylaşmaktan çekinmeyin!