SQL Insert, Update, Delete Output, yazım ile sql eğitim setimize devam ediyorum. Bu dersimizde sql de insert, update ve delete yaparken istediğimiz bir kolondaki bilgiyi geri dönüş olarak alma işlemini yani SQL Output işlemini göreceğiz. Bu ders sql ScoopeIdentity() işlemi değildir. ScoopeIdentity() sadece indentity key kolonunu yani id kolonundaki bilgiyi verir ama biz herhangi bir kolondaki veriyi alacağız.
SQL Insert Output
İlk önce insert işleminden SQL Output görelim. Bir tabloya insert kayıt eklediğimizde çoğu zaman bir geri dönüş almak isteriz. Bu da genelde ID kolonundaki id değeri olur. Ancak daha farklı bir veriyi almak istersek ne yapacağız? Bunun için çoğunlukla da ScoopeIdentity ile ID kolonunu alırız ve insert işleminden sonra bir select sorgusu ile istediğimiz bilgileri alırız. bu hem performans açısından bir sıkıntıdır hemde fazladan kod yazmamızı neden olur.
Şimdi göreceğimiz işlemde insert sorgusunun içerisine ekleyeceğimiz bir kaç komut ile istediğimiz bilgileri nasıl alacağımızı göreceğiz.
Diğer bir deyiş ile İnsert sorgusu ile select sorgusunu tek seferde yazacağız. Çok önceleri üzerinde uğraşmış olduğum bir projenin veri tabanı üzerinden bir örnek hazırladım. Görelim.
INSERT INTO ALINAN_ADISYON ( Kasa_Masa_Kodu , Kasa_Giren_Tutar , Kasa_Masa_Sip_Adet ) OUTPUT INSERTED.Kasa_RECno , INSERTED.Kasa_Masa_Kodu , INSERTED.Kasa_Giren_Tutar , INSERTED.Kasa_Masa_Sip_Adet VALUES ('T1', 500, 10)
Sorguyu incelediğimizde farklı olan kısmı görebiliyorsunuz değil mi? Sorguda görünen OUTPUT kısmında INSERTED.* olarak belirtilen kolondaki bilgiler bize geri dönüş olarak geliyor. Aşağıdaki bu sorgu çalıştığında gelen dönüşü görebilirsiniz.
Örnek üzerinde sadece inseert edilen kolonların bilgilerini geri dönüş olarak aldık ancak burada tablodaki tüm kolonları alabiliriz. Örnek olarak Kasa_RECno kolonu insert içerisinde yer almıyor ama Output kısmında kullanabiliyoruz.
SQL Update Output
Şimdi sırada output almayı yani geri dönüş almayı Update işlemi sırasında nasıl yaptığımızı görelim. Düşündüğünüz gibi burada da UPDATED olarak değil yine INSERTED olarak kullanıyoruz. Hemen örneğimizi görelim.
UPDATE ALINAN_ADISYON SET Kasa_Masa_Kodu = 'T10' , Kasa_Giren_Tutar = 250 , Kasa_Masa_Sip_Adet = 25 OUTPUT INSERTED.Kasa_RECno , INSERTED.Kasa_Masa_Kodu , INSERTED.Kasa_Giren_Tutar , INSERTED.Kasa_Masa_Sip_Adet WHERE Kasa_RECno = 2087
Yine yukarıda verdiğim örneği bir update sorgusuna dönüştürdüm ve değerleri biraz değiştirdim. Örnekte gördüğünüz gibi Where şartını yazmadan önce istediğimiz output değerlerini yazıyoruz.
NOT: Burada ekran görüntüsü vermedim ama yukarıdaki ile aynı olduğundan dolayı ekran görüntüsü koyma gereği duymadım.
Diyelim ki,
Bu output değerlerini alırken birde hesaplatma yapmak istiyorsunuz. Atıyorum 10 tane iskonto yazdınız ve bu iskontoların toplamını geri dönüş almak istiyorsunuz. Buna benzer bir işlem yapalım.
UPDATE ALINAN_ADISYON SET Kasa_Masa_Kodu = 'T10' , Kasa_Giren_Tutar = 250 , Kasa_Masa_Sip_Adet = 25 OUTPUT INSERTED.Kasa_RECno + 50 , INSERTED.Kasa_Masa_Kodu + '-55' , INSERTED.Kasa_Giren_Tutar + 10 , INSERTED.Kasa_Masa_Sip_Adet + INSERTED.Kasa_Giren_Tutar WHERE Kasa_RECno = 2087
Örnekte gördüğünüz gibi output değerlerini alırken bu aldığımız değerlere müdahele edebiliriz.
SQL Delete Output
Aynı şekilde Delete işleminde de bunu kullanabiliyoruz.
delete from ALINAN_ADISYON OUTPUT DELETED.Kasa_RECno, DELETED.Kasa_Masa_Kodu WHERE Kasa_RECno = 2087<br><br>
Bu komutu kullandığımızda scopeIdentity() komutunu da kullanmamıza gerek kalmıyor. Son zamanlarda Guid kullanılmaya başlandığınız da göz önüne alırsak ve scoperIdentity() nin de guid için çalışmadığını da göz önüne alırsak en güzel çözüm olarak bu komut karşımıza çıkıyor.
SQL Insert, Update, Delete Output , dersimizde bu kadardı dostlar. SQL Output işlemi gerçekten çok işimize yarayacak bir komut olarak karşımıza çıkıyor. Çok kullanışlı ve çok işe yarar bir komuttur. Bun komutu öğrendiğim günden beri sürekli olarak kullanıyorum.
Diğer SQL derslerimizde görüşmek üzere.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
Takipte kalın.