TSql While döngüsünde Cursor kullanmadan satır satır işlem yapmak

Merhaba arkadaşlar bu makelde tsql ile while döngüsünde satır bazlı işlem nasıl yapabiliriz onu göstermeye çalışacağım. Cursor'ın syntax'ı sinirimiz bozduğu için eğlencesine böyle bir şey yaptım. İnternettede genelde cursor paylaşılmış veya while döngüsünde genelde sayacı ekrana yazıldığı örnekler paylaşılmış. Bu yöntemide değerlendirebilirsiniz.

1. Adım: Gerekli değişkenlerimizi tanımlıyoruz. Counter(Sayaç) ve totalCount(Toplam dönüş sayısı)

2. Adım: Bir sanal tablo oluşturuyoruz. Sanal tablolar oluşturulurken başına # işareti konmaktadır.

3. Adım: row_number() ile CustomID oluşturuyoruz ve çalışma anında kullanabilmek için WITH ile tablo sonucuna aktarıyoruz.

4. Adım: Sanal Tablomuzu dolduruyoruz.

5. Adım: Toplam dönüş sayısımızı buluyoruz.

6. Adım: counter toplam dönüş sayımızdan küçük ve eşit olduğu sürece while ile dönüyoruz. (row_number(1,2,3,4,5,6) şeklinde artar counter değişkenimizde bu şekilde aracağından eşit olmama ihtimali yok.)

7. Adım: Bu adımda veritabanı tablomuzdan hangi alanlar üzerinde işlem yapacaksak o alanların değişkenlerini tanımlıyoruz. 

8. Adım: Sanal tablodan sayaç ve ID'nin eşit olduğu satırı çekip top 1 ile ilkinin coutry_name alanını alıp ilgili değişkene atıyoruz.

9. Adım: Sayacımızı arttırıyoruz.

10. Adım: İşimiz bitince Sanaltabloyu kaldırıyoruz.

 

Sorulabilecek Sorular

Soru: 3. Adımda neden CustomID oluşturuyoruz?

Çünkü ilgili veritabanı tablosunda bir satır silinmişse ID satır atlamıştır. Dolayısıyla While döngüsü içinde counter'a eşitleyemeyiz.

Soru: 4. adımda neden WITH ile oluşturduğum sonucu(tablo) sanal tabloya aktarıyorum direk while içinde kullanamazmıyım veya sanal tabloya niye ihtiyacım var?

WITH'ten sonra araya giren kodlar WITH'in kullanımını düşürüyor. Yani 4. ve 5. adımlardaki kodlar benim tablo isimli with sonucumu kullanmamı engelliyor ve yani with sonucunun hemen kullanması lazım ama 5. adımında kullanılması gerekiyor o yüzden sanal tabloya atıp while içinde sanal tabloyu kullanıyorum.

İyi Kodlar!