MSSQL Cursor Nedir?

Cursor herkes tarafından korkulan ve anlaşılması zor gelen konudur fakat bu sanıldığı kadar zor ve korkulacak konu olmadığını bu makale de anlayacaksınız.

Cursor bir veri grubu üzerinde satır satır gezinerek işlem yapmayı sağlayan t-sql komutudur.For döngüsüne benzemektedir.Belirtilen select sorgusundan gelen verileri satır satır dolaşır ve bir sonraki komut olan open komutundan sonra yazılacak t-sql e göre bu verileri işler ve sonuç döndükten sonra deallocate ile sistemden temizlenir.

Cursor kullanmadan önce bilmenizi isterim ki cursor sistemi diğer t-sql komutlarına nazaran daha fazla yormaktadır.

Aşağıdaki t-sql cümlesinde Postalcode ‘u aynı olanları grupladıktan sonra farklı bir tablo ya  gruplanan postalcode verilerini  insert ediyoruz. Kısaca yapılan işi özetleyecek olursak aynı posta koduna sahip verileri alıp diğer tabloya insert yapıyoruz.  Parametrelerin açıklamasını yorum şekilde yanlarına yazıyorum.

DECLARE @postalcode varchar(50) --cursordan dönecek değerleri tutmak için değişken tanımlıyoruz.

DECLARE  cursorAdi CURSOR FOR --CursorAdını belirtiyoruz

SELECT distinct(PostalCode)

      FROM [AdventureWorks2014].[Person].[Address]         
group by PostalCode --işlem yapılacak sorguyu buraya yazıyoruz
  
OPEN cursorAdi  --Cursor 'ı burada açıyoruz.

FETCH NEXT FROM cursorAdi --bu adımda baştan başlatarak satır satır gezmesını sağlıyoruz

INTO @postalcode

WHILE @@FETCH_STATUS = 0 --en son işletilen fetch komutunun durumu burada tutulur başarılı ise 0 değilse -1,satır bulunmuyorsa -2 döner.

BEGIN

 insert  into  dbo.Adress_f select AddressID,AddressLine1,PostalCode  from [AdventureWorks2014].Person.Address where PostalCode=@postalcode

  FETCH NEXT FROM cursorAdi INTO @postalcode

END

CLOSE cursorAdi --cursor'ı kapatıyoruz.

DEALLOCATE cursorAdi -- bu komut yardımı ile cursor için ayrılan kaynaklar serbest bırakılır.

Loading