Trigger'da bir garip hata

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Trigger'da bir garip hata

Mesaj gönderen mkysoft »

MSSQL'de tabloya bir trigger yazdım. after update olayında değişen veriye göre başka bir tabloyu güncelliyor.
SQL Manager'dan elimle yazdığım update komutuyla trigger çalışıyor ancak şöyle bir sorun var:

Kod: Tümünü seç

UPDATE ttt SET aa=bb WHERE xxx in ('yy','zz');
bu komutu çalıştırdığımda trigger sadece yy kaydı için çalıştırılıyor, zz kaydı için çalışmıyor. Benim mantığıma ters geldi. Nedir hikmeti?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Trigger'da bir garip hata

Mesaj gönderen aslangeri »

mssql de trigerler satır bazlı çalışmıyor onu dikkate aldınız değilmi ?
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Trigger'da bir garip hata

Mesaj gönderen mkysoft »

Hayır almadım çünkü bu şekilde olduğunu bilmiyordum. Satır bazlı çalışmıyorsa tahmin ettiğime göre verileri günceleyen sorgunun where kısmı tirgger içinede o şekilde geliyor.
Sisteme gelen verinin büyük, küçük, like, in, not in, v.s. şeklinde geldiğini nereden anlayabilirimki? Tüm ihtimalleri içiren bir trigger nasıl yazılabilir? Pratik bir yolu mu var yoksa trigger tanımlarnırken bir yar mı yapılıyor? Teşekkürler.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Trigger'da bir garip hata

Mesaj gönderen aslangeri »

sql server trigerlarında inserted ve deleted cursorları var.
o cursorlardaki kayıtları tek tek dönerek değişen kayıtları bulabilir ve ona göre işlem yapabilirsiniz.
bu cursorlar ile ilgili sitede makale olması lazım yanlış hatırlamıyorsam onlara bi göz atabilirsiniz.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
akdatilla
Üye
Mesajlar: 292
Kayıt: 02 Nis 2006 06:04
Konum: Antalya

Re: Trigger'da bir garip hata

Mesaj gönderen akdatilla »

merhaba
SQLServer'da bir tabloya update komutu verildiğinde güncellenen her bir satırın eski değerleri deleted, yeni değerleri inserted sanal tablosundan okunabilir.
bu tablolarda cursor comutları ile okunabilir.
güncellenen kayıtları loglar tablosuna ekleyen örnek bir uygulama:

Kod: Tümünü seç

  DECLARE @I INT,@AA INT,@BB INT
  DECLARE XCUR CURSOR
  READ_ONLY FAST_FORWARD
  FOR SELECT DISTINCT ID,AA,BB FROM DELETED A WHERE ID IN (SELECT ID FROM INSERTED)
  OPEN XCUR
  FETCH NEXT FROM XCUR INTO @I,@AA,@BB
  WHILE @@FETCH_STATUS = 0
  BEGIN
        INSERT INTO LOGTBL (BILGI) VALUES ('ID='+CAST(@I AS VARCHAR(5))+',AA='+CAST(@AA AS VARCHAR(5))+',BB='+CAST(@I AS VARCHAR(5)))
        FETCH NEXT FROM XCUR INTO @I,@AA,@BB
  END
  CLOSE XCUR
  DEALLOCATE XCUR
  /*not:id'si değişen kayıtlar eklenmez*/
Cevapla