Tetikleyicinin Birden Fazla Kayıt İçin Çalışması

Veritabanı programcılığı Tetikleyicinin Birden Fazla Kayıt İçin Çalışması Programlama hakkında bilgi paylaş; Yazdığız tetikleyici eğer inserted tablosundan önce değerleri alıp sonra işlem yaptırıyorsanız aş...
Cevapla
 
Seçenekler
  #1  
Arama 24-02-2008, 05:10
Banlı
Üyelik Tarihi: 18/09/07
Mesajlar: 1.551
 
     WS-Ticareti: (1)
Blog Yazıları: 1
Teşekkürleri: 0
20 Msg. 27 Tşkr.
Rep Gücü: 0 B737 rep gücü epey yüksek

Tetikleyicinin Birden Fazla Kayıt İçin Çalışması

Yazdığız tetikleyici eğer inserted tablosundan önce değerleri alıp sonra işlem yaptırıyorsanız aşağıdaki örnekte olduğu gibi, trigger birden fazla kayıt eklendiğinde sadece son kayıt için işlem yapacaktır:
Deneme adında bir tablomuz olsun tabloda Temp1,Temp2,Temp12 adında 3 alanımız olsun, Temp12 alanında Temp1 + Temp2 değeri bulunuması gereksin. Bunu sağlayacak tetikleyici aşağıdaki gibidir.

Örnek 1
--------------------------------------------------------------------------------



CREATE TRIGGER TR_Deneme ON dbo.Deneme
FOR INSERT,UPDATE
AS
DECLARE
@vTemp1 VARCHAR(25),
@vTemp2 VARCHAR(25),
@vTemp12 VARCHAR(50),

SELECT @vTemp1 = Temp1 , @vTemp2 = Temp2 FROM inserted

SET @vTemp12 = @vTemp1 + @vTemp2

UPDATE Deneme SET Temp12 = @vTemp12
WHERE @vTemp1 = Temp1
AND @vTemp2 = Temp2



Bu örnekte görüldüğü gibi trigger tek kayıt eklendiğinde bu işlemi yapacaktır ve doğru çalışacaktır. Oysa birden fazla kayıt ekleme yaptığınızda ise sadece son kayıdın Temp21 alanı değişecektir.

Birden fazla kayıt ekleme olduğunda tetikleyicinin çalışması için :

Örnek 2
--------------------------------------------------------------------------------



CREATE TRIGGER TR_Deneme ON dbo.Deneme
FOR INSERT,UPDATE
AS

UPDATE d SET d.Temp12 = i.Temp1 + i.Temp2
FROM Deneme d,inserted i
WHERE d.Temp1 = i.Temp1
AND d.Temp2 = i.Temp2



Yukarıdaki yapı birden fazla kayıt eklendiğinde herbir kayıt için tetikleyicinin doğru çalışmasını sağlayacaktır.
inserted tablosu üzerinden ana tabloya inner join kurarak sorunu çözebiliriz. Yani birden fazla kayıt ekleme olması düşünülen tablolardaki tetikleyiciler için inserted tablosundan değişkenlere değer atamak yerine update query içinde inserted tablosu üzerinden join kurarak ve yapılacak işlemleri T-SQL kodlarıyla değil SQL kodlarıyla yaparak her bir eklemede tetikleyicinin çalışması sağlanabilir.Daha karmaşık yapılarda IF yerine CASE WHEN <değişken>"Oparatör"<Değer> THEN <Sonuç> ELSE <Sonuç> END kullanarak çözebilirsiniz. Daha da karmaşık yapılar için daha çok SQL komutu kullanmak gerekebilir.
Alıntı ile Cevapla
Cevapla
Arama Etiketleri: , , ,



Seçenekler


Benzer Konular
Konu Konu Açanlar Forum Cevaplar Güncel Mesajlar
Arama Motorların Direkt Kayıt Siteleri, Arama Motorları Kayıt Linkleri By_ŞeytaN Genel 17 28-11-2008 09:59
birden fazla reklam alanı olusturmak adsense gelirini etkilermi? egitimbilgisi Google Adsense 2 18-08-2008 12:39
ListBox veya ComboBox'ta seçili bir veya birden fazla öğeyi seçilmemiş hale getirme Celebrian Delphi 0 24-12-2007 02:15
Birden fazla fonksiyonlu HTML Site CMDizayn SMF 0 18-12-2007 02:14
Microsoft VirtualWiFi ; Tek WLan kartla birden fazla kablosuz ağa bağlanın LeaveMeALoNe Donanım Haberleri 0 19-11-2007 07:56

Webmaster Sitesine Reklam Verin

Webmaster web tasarım online reviews ~ Kadınlar blogu ~ Apple iPhone, iPod Touch ( iTouch ) Forum ~ iPhone