Insert trigger

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ı
dolphin
Üye
Mesajlar: 8
Kayıt: 16 Haz 2003 02:19
İletişim:

Insert trigger

Mesaj gönderen dolphin »

Selam arkadaslar,
Sql server da insert trigeri icersinde insert edilen bir tablonun fieldini nasil set edebilirim.

Yani mesela insert into Table1 field1, field2 values ('a', 'b') gibi bir sql cumlesi calistiginda ben trigger icersinde filed3 = 'c' yapmak istiyorum.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Kod: Tümünü seç

update tablo1 set field3='c' where .......
tabi sadece ilgili kaydi update edebilmek icin where kismina primary key alan veya alanlarini ve insert edilen degerlerini yazmalisiniz.

Tabi insert trigger'inin after insert olarak calismasi gerekiyor.
Kullanıcı avatarı
dolphin
Üye
Mesajlar: 8
Kayıt: 16 Haz 2003 02:19
İletişim:

Mesaj gönderen dolphin »

Evet ama burda onemli olan insert edilen kaydin field ini trigger icinden set edebilmek. Yani where kismini nasil yazabilecegim lazim banada. Bu arada sunu soylemeyi unuttum tabloda identity olan unique bir field var. Where kismina IDENT_CURRENT ile son id yi alip yazmak problem cikarirmi acaba?
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

problem çıkarmaması lazım. Ben daha önce bu şekilde bir stored proc yazmıştım ama şu an yanımda yok. Eğer deneme şansın varsa, bir dene.

Kolay gelsin.
Kullanıcı avatarı
asavas
Moderator
Mesajlar: 41
Kayıt: 10 Haz 2003 01:45

Mesaj gönderen asavas »

yanlış hatırlamaıyorsam SQL Server içinde insert ve delete işlemleri için INSERTED ve DELETED diye iki geçici tablo var. Yeni bir kayıt yaparken trigger içinde INSERTED.Field3 = sdfsd yazarsan istediğini yapabilirsin.
kolay gelsin
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

MSSQL kullanmadigim icin bilmiyorum fakat Sybase triggerlerinde silinen veya update'den onceki degerleri verdiginiz bir alias ile kullanabiliyorsunuz. (referencing old as oldrows) Yeni eklenen kayitlari da "referencing new as newrows" seklinde trigger basinda tanimlayip newrows.field3 seklidne kullanabiliyorsunuz.

MSSQL'de de bu vardir. asavas'in dedigi INSERTED ve DELETED o anlamda olabilir. Ornek herhangi bir trigger'da gorebilirsiniz bunu zaten.

Maksimum kaydi alip kullanmak makul gibi gorunmekle birlikte ileride boyle bir kod yazdiginizi unutup tablonuza ilgili alan degeri maksimum olan degil de arada bir degere sahip kayit eklediginizde sistem calismayacaktir. Dolayisiyla boyle birsey yapmamaniz gerektigini surekli hatirlamaniz lazim. Velhasil bence o sekilde yapmamali.

Kolay gelsin..
Kullanıcı avatarı
denaris
Üye
Mesajlar: 28
Kayıt: 06 Ağu 2003 11:37
Konum: Ankara

Mesaj gönderen denaris »

SQL Server Hiç Kullanmadım Ama Oracle 'da Trigger Yazımında FOR EACH kısmında OLD ve NEW alanlarına gerekli değerleri koyduğunda (OLD ve NEW olsun) :NEW.field3 = 'c' diyebiliyoruz. SQL Server bunu nasıl yapıyor pek bilmiyorum. Kolay gelsin
yok
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Insert

Mesaj gönderen Kuri_YJ »

Merhaba,

Insert işleminde Trigger gerçekleşirken Trigger Zamanlaması da önem taşıyor. Interbase'de Before Insert, After Insert gibi Kaydın öncesinde mi yoksa sonrasında mı şeklinde bir ayrım var. SQL Server'da da bu var.

Eğer After pozisyonunda ise (ki default'u budur) update'ini,

Kod: Tümünü seç

UPDATE TABLO1 SET FIELD3='c' WHERE (SELECT Tablo1dekiIdentityOlanField FROM INSERTED) = Tablo1dekiIdentityOlanField
Ancak dikkat edilmesi gerweken bir şey eğer insert işlemi toplu bir inser ise bu şekilde olmaz, bu sadece aynı anda sadece bir kayıot yaparken kullanabilirsin.

Kolay Gelsin

Kuri TLJ
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Re: Insert

Mesaj gönderen fahrettin »

Kuri_TLJ yazdı:
Ancak dikkat edilmesi gerweken bir şey eğer insert işlemi toplu bir inser ise bu şekilde olmaz, bu sadece aynı anda sadece bir kayıot yaparken kullanabilirsin.

Kuri TLJ
Evet yeri gelmisken bu konu ile ilgili sunu belirteyim. Kuri_TLJ Bey'in de belirttigi gibi MS SQL Server statement level trigger calistirir dolayisiyla toplu insert ve update islemleri icin farkli yollar izlemeyi gerektirir.

Kendim kullandigim icin bildigim Sybase ve Interbase ise row level trigger calistirir ve dolayisiyla toplu olarak yapilan her insert , update veya delete islemi sirasinda her satir icin triggerlar ayri ayri calistirirlirlar.

Kolay gelsin...
Cevapla