Yandex Metrica
SQL Server Cursor İle Kayıtlar Üzerinde Güncelleme Yapmak - Yasin Sunmaz

Yasin Sunmaz

Kodladıkça değişen bir dünya...

SQL Server Cursor İle Kayıtlar Üzerinde Güncelleme Yapmak

28.04.2022 yasinsunmaz 2747 0

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.

SQL Server Cursor İle Kayıtlar Üzerinde Güncelleme Yapmak

Ş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.

SQL Server Cursor İle Kayıtlar Üzerinde Güncelleme Yapmak

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.

Diğer Yazılar

SQL Fonksiyonları: Veritabanlarında Güçlü ve Esnek İşlemler

09.06.2023 yasinsunmaz 300 0

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'e Dair Her Şey OneSQL'de, Ne Ararsanız Bulabileceksiniz

03.06.2023 yasinsunmaz 251 0

Veri tabanı yöneticilerinin yanında zaman zaman yazılımcıların da SQL'i aktif olarak kullanması gerekebiliyor. SQL'i belli başlı şekillder kullanıp işlemlerimizi ...

SQL Server Offset Fetch Kullanımı

06.03.2023 yasinsunmaz 637 0

Merhabalar uzun zamandır yazı yazamadım. Ülke olarak zor zamanlar geçirmekteyiz. Herkese çok geçmiş olsun diyerek kısa bir yazı ile tekrar buradayım. SQL ...

SQL Server Sequence Kullanımı

14.01.2023 yasinsunmaz 1240 0

Veritabanında yeni keşfettiğim Sequence özelliğini sizlerle paylaşmak isterim. Squence genel olarak belirli değerler arasında numeric ve sıralı sayılar üretir. ...

SQL Server OUTPUT Kullanımı Silinen Kaydın Bilgilerini Geriye Döndürme

11.01.2023 yasinsunmaz 368 0

Bu yazımda SQL Server'da OUTPUT ile DELETED komutunun yapısını inceleyeceğiz. Kayıtlar üzerinde yapılan silme işlemlerinde, kaydın bilgilerin...