Merhaba arkadaşlar bu makalede T-SQL’de WHILE döngüsünün nasıl yapıldığından bahsetmek istedim.
SQL’de yazılımda olduğu gibi for veya foreach döngüleri bulunmamaktardır.
Bir döngü yapmak istediğimizde while kullanmamız gerekir.
Peki while döngüsünü T-SQL’de nasıl yaparız buyrun bir göz atalım.
DECLARE @pCounter INT --Değişken tanımlıyoruz
SET @pCounter = 1 --Değişkenin başlangıç değerini atıyoruz
--Değişkenimiz 10'dan küçük veya eşit ise ekrana yazdıralım
WHILE (@pCounter<=10)
BEGIN
--Yazdırma işlemi
PRINT 'Sayaç : '+ CONVERT(NVARCHAR(50), @pCounter)
--Sayacımızı 1 arttırıyoruz
--arttırmazsak sonsuz döngüye gireriz.
SET @pCounter = @pCounter+1
END
Tabiki bu çok basit bir örnek, yapmak istediğimiz işlemlerin karmaşıklığına göre döngümüzdeki işlemlerde karmaşıklaşacaktır.
Gelin biraz daha komplex bir döngü yapalım birlikte.
--Kişiler adında bir tablomuz olsun
CREATE TABLE _Kisiler
(
Ad NVARCHAR(100),
Soyad NVARCHAR(100)
)
--Kişiler tablomuza bir kaç kayıt girelim
INSERT _Kisiler
VALUES ('Onur','Yılmaz')
INSERT _Kisiler
VALUES ('Seyhan','Yılmaz')
INSERT _Kisiler
VALUES ('Kadir','Kazan')
INSERT _Kisiler
VALUES ('Hakan','Patır')
--Kişiler tablosundaki kayıtlarımızı sıra numarası ile
--bir temp tabloya alalım
SELECT ROW_NUMBER() OVER (ORDER BY Ad) AS 'RowNumber',
*
INTO #tmpKisiler
FROM _Kisiler
--Döngüde kullanacağımız değişkenleri tanımlayalım
DECLARE @rowcount INT --Kişiler tablomuzdaki kayıt sayısı
DECLARE @currentrowcount INT --Döngü sırasında hangi kayıtta olduğumuz
DECLARE @currrentname NVARCHAR(100)--Döngü sırasında hangi isimde olduğumuz
--Değişkenlerimize değerlerimizi atayalım
SET @rowcount=(SELECT count(Ad) FROM #tmpKisiler) --Kayıt sayısı
SET @currentrowcount =1 --Başlangıç değeri 1
--Döngüyü başlatalım
WHILE(@currentrowcount<=@rowcount)
BEGIN
--Update Edeceğimiz Kayıtı SET ediyoruz
SET @currrentname =(
SELECT Ad
FROM #tmpKisiler
WHERE RowNumber = @currentrowcount
)
--İsimlerin Yanına (Güncel) ve sıra numarasını
--yazarak güncelleme yapalım
UPDATE #tmpKisiler
SET Ad = @currrentname+' (Güncel)'+CONVERT(NVARCHAR(50),@currentrowcount)
WHERE RowNumber = @currentrowcount
--Kayıt sıramızı 1 arttıralım
SET @currentrowcount = @currentrowcount+1
END
--Güncel isimleri _KisilerGuncel Tablosuna Insert Edelim
SELECT *
INTO _KisilerGuncel
FROM #tmpKisiler
--şimdide _KisilerGuncel tablosundaki kayıtlarımızı görelim
SELECT *
FROM _KisilerGuncel
--Temp tablomuzu veri tabanından kaldıralım
DROP TABLE #tmpKisiler
Gördüğümüz gibi işlemler karmaşıklaştıkca döngüde karmaşıklaşıyor.
Umarım yararlı olabilmişimdir.
Bir sonraki makalede görüşmek dileğiyle,
İyi günler dilerim.