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.