ASP.NET
Network Akademi

Met Hostimg

“Bilgi paylaşıldıkça artar” sloganı ile .NET Platformuna ilişkin birikimlerin paylaşıldığı ASP.NET.TR Topluluğunda sizde “YAZAR” olmak için ; info@asp.net.tr e-mail adresine kendinizi anlatan bir e-mail göndererek başvuruda bulunabilirsiniz.

SQL WHILE DÖNGÜSÜ

Onur YILMAZ
SQL
12.07.2011 16:54:46
Hit : 4974

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.



BU İÇERİĞE YORUMDA BULUNUN


Bu MAKALE'ye yorum yapabilmek için Üye olmalısınız ...!


BU İÇERİĞE YAPILAN YORUMLAR