Triger yazımı

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
Kullanıcı avatarı
nosedive
Üye
Mesajlar: 238
Kayıt: 16 May 2004 07:48

Triger yazımı

Mesaj gönderen nosedive »

Main isminde bi tablom var...buna baglı bi alt tablo sosyal_doku tablosu

Main tablosunda kişisel bilgileri tutuyorum..ve her kişiye bir ID veriyorum..

bi alt tabloda ise ( sosyal doku tablosu ), sosyal yardım bilgilerini tutuyorum. onun altındada yardim diye bir tablom var onda da alınan yardımları...

main tablosundaki ID yi sosyal_doku tablosundaki KISI_ID ile ilişkilendirdim. yeni bir kişi girildiğinde ona bağlı alt tabloda birden fazla kayıt açıyorum. yani bir kişiye ait birden fazla sosyal forum girişi işte..

şimdi girişler tamamda en üstteki master tablodan yani kişilerin kayıtlı olduğu main tablosundan bir kayıt silindiğinde bi alt tablodaki ID ye bağlı kayıtlarıda sileceğim...trigerle yapmak istedim ama systax ını bilmiyorum yardım cı olurmusunuz
teşk

Kod: Tümünü seç


CREATE TRIGGER [kayıtsil] ON [dbo].[main] 
FOR DELETE 
as Delete  from Sosyaldoku  where sosyaldoku.kisiid=main.id

şeklinde bişi yaptım ama doğrusunu uzmanları bilir...teşk.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Buradaki makalede bir örnek göndermiştim.
Kullanıcı avatarı
nosedive
Üye
Mesajlar: 238
Kayıt: 16 May 2004 07:48

çözüm

Mesaj gönderen nosedive »

Kod: Tümünü seç

CREATE TRIGGER silecek ON [dbo].[main] 
FOR DELETE AS
BEGIN 
  DECLARE @xID INT 
  DECLARE SILINENLER CURSOR FOR SELECT ID FROM DELETED 
  OPEN SILINENLER 
  FETCH NEXT FROM SILINENLER INTO  @xID 
  WHILE @@FETCH_STATUS <> -1 
  BEGIN 
    DELETE FROM sosyaldoku WHERE Kisi_ID=@xID 
    FETCH NEXT FROM SILINENLER INTO  @xID 
  END 
  CLOSE SILINENLER 
  DEALLOCATE SILINENLER 
END 
Teşekkürler...
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Trigger'lara girmeden FOREIGN KEY tanımlamasında ON DELETE CASCADE diyerek de direk bu işi yapabiliyorsun.

İyi çalışmalar.
Cevapla