SQL (Structured Query Language), veritabanı yönetim sistemlerinde verileri yönetmek, sorgulamak ve işlemek için yaygın olarak kullanılan bir dildir. SQL fonksiyonl...
SQL Server Cursor İle Kayıtlar Üzerinde Güncelleme Yapmak
SQL Server'da bazı durumlarda toplu update ya da insert gibi işlemlerin yanı sıra o anda var olan kayıt üzerinde farklı durumlar geliştirmemiz gerekebiliyor. Genel mantıkta cursor yapıları bir tabloyu SELECT ile listeye alıp bu listede hangi alan üzerinden işlem yapacaksak öncelikle onun sorgusunu hazırlıyoruz. Sonrasında bu elimizdeki liste ile programlama dillerinden bildiğimiz foreach ve while döngüsü ile gelen veriyi tek tek okuyabiliyoruz. Bundan sonrası artık bizim hangi işlem yapmak isteğimize bağlıdır. Bu döngü içerisinde ekleme, güncelleme ve silme gibi farklı işlemler yapabiliyoruz.
Ben bu yazımda örnek senaryo olarak elimizdeki ürün listesindeki birim fiyatlarını 10 TL'den başlayarak 1 TL arttırarak güncelleme yapmak istiyorum. Mevcut ürün listesi aşağıdaki gibidir. Ürünlerin birim fiyatlarını incelediğinizde hepsinin farklı olduğunu görebilirsiniz.
Şimdi yapacağımız cursor yapısı ile 10 TL'den başlayıp arttırarak kayıtlar üzerinde güncelleme yapacağız. Cursor mantığımız şöyle olacak: Öncelikle veriler üzerinde gezebilmek için @ID değişkeni tanımlıyoruz. Ayrıca başlatmak istediğimiz para değerini de money tipinde tanımlayıp değer atıyoruz. Currsor için bir isimlendirme yapıyoruz. Sonrasında hangi veri kümesinde işlem yapacaksak onun listesini alıp ProductID değerini seçiyoruz. Cursor veri kümemiz hazırlandıktan sonra bu cursorü açıyoruz. FETCH NEXT komutu ile bu cursordan gelen veri listesi üzerinden işlem yapıyoruz. Döngü için while ile döngü işlemini kullanacağız. Bu döngü içerisinde de UPDATE komutunu yazıyoruz. Koşul olarak cursorda aldığımız @ID değerini belirtiyoruz. Değişecek veri olarak ise UnitPrice'ı set ediyoruz. UPDATE işleminden sonra da @unitPrice değerini 1 arttırıp yine @unitPrice değişkenine atıyoruz. Böylece sonraki veride @unitPrice değeri 1 artmış olur ve yeni kaydı güncelleme işlemi yapılır. Tüm satırlar işlendikten sonra da oluşturduğumuz cursorü kapatıyoruz.
--Cursordan alınacak veri
DECLARE @ID INT;
--Kullanmak istediğimiz para için tanımlama
DECLARE @unitPrice MONEY=10;
--Cursor adını yazıyoruz
DECLARE UnitPriceAdd CURSOR FOR
--Product listesinde ProductID'yi getiren liste
SELECT
p.ProductID
FROM Products p
--Cursor açıyoruz
OPEN UnitPriceAdd
--Bu cursorda gelen kayıtlar üzerinde ilerliyoruz
FETCH NEXT FROM UnitPriceAdd INTO @ID
--While döngüsü ile veriler üzerinde işlem yapıyoruz
WHILE @@FETCH_STATUS = 0
BEGIN
--Yapmak istediğimiz UPDATE işlemi ve koşul olarak cursordan gelen ID değeri
UPDATE Products SET UnitPrice = @unitPrice
WHERE ProductID=@ID
--Birim fiyatı +1 yaparak arttırıyoruz
SET @unitPrice = @unitPrice + 1
FETCH NEXT FROM UnitPriceAdd INTO @ID
END
--İşlem bitince cursorü kapatıyoruz
CLOSE UnitPriceAdd
DEALLOCATE UnitPriceAdd
Cursorümüzü çalıştırdığımızda bir sorun yok ise aşağıdaki gibi kayıtların sırası ile güncellendiğini görebilirsiniz. Tabi bu gibi siz birden fazla sorgu çalıştırıp farklı işlemler de yapabilirsiniz.
Umarım faydalı olmuştur. İyi çalışmalar.
Yorum yapabilmek için giriş yapmalısınız. Giriş yapmak için tıklayınız.