Arama butonu
Bu konudaki kullanıcılar: 1 misafir
6
Cevap
611
Tıklama
0
Öne Çıkarma
Insert sonrası update trigger
K
6 yıl
Er
Konu Sahibi

Merhaba,

Elimde iki tablo var. Daha önce trigger tecrübem olmadığı için şu aşamada takıldım: Mesaj tablosuna yeni bir mesaj insert edildiğinde; bu tablodaki kullaniciadi alanını Personel tablosu ile eşleştirip, personelin sicil numarasını Mesaj tablosundaki sicil alanına yazacak bir tetikleyici oluşturmak istiyorum. Sanırım insert sonrası update yapacak bir tetikleyici oluşturmak gerekiyor fakat bir türlü başaramadım. Bu konuda yardımcı olabilecek birisi var mıdır?

Tablo Mesaj:
+-----------+---------+------+-----+---------+----------------+
| id | kullaniciadi | mesaj | icerik | tarih | sicil |
+-----------+---------+------+-----+---------+----------------+

Tablo Personel:
+-----------+---------+------+-----+---------+----------------+
| id | sicil | kullanici_adi | ad_soyad |
+-----------+---------+------+-----+---------+----------------+

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



A
6 yıl
Onbaşı

M
6 yıl
Yarbay

Tavsiyem trigger kullanma. Trigger test edilebilir değildir. X işi yapman y tablosuna ve z tablosuna insert anlamıyona geliyorsa aynı transaction scope içinde kendin insert et. Böylesi daha test edilebilir kod yazmanı sağlar. Yoksa sen havada bir şey yapıyorsun o gidiyor başka iş yapıyor ve tablo değişirse hatayı yakalaman da zor.



B
6 yıl
Yüzbaşı

Transaction kullanabilirsen transaction kullan. İlle de trigger mı kullanman gerekiyor?



T
6 yıl
Binbaşı

Arkadaşların da dediği gibi trigger ilk aşamada çok basit bir çözüm olarak gözükse de ilerleyen zamanlarda takip etmesi çok zor hale gelen bir yapıya dönüşüyor. Burada mesaj tablosuna insert atmadan sicili çekip öyle insert atarsanız çok daha okunabilir bir kod olur.

Triggerlarda genelde ben update_date, insert_date gibi alanların tutulmasını beğeniyorum.



A
6 yıl
Yüzbaşı

Not: Yazdıklarım mssql içindir.

İlerde bir gün lazım olabilecek bir bilgi olarak yazayım. DML triggerları ikiye ayrılır "after" ve "instead of/for". Bunlar update, delete ve insert işlemlerine yazılabilir. After triggerinda işlem sonrası tetikleme olur ve yapmak istediğinizi yaparsınız. istead of da ise işlem öncesi tetikleme olur işlem yapılmaz ve sizin yapmak istediğiniz şey yapılır zaten adından da anlaşılacağı gibi işlem "yerine" yapılır. Örneğin istediniz şeyi yapmak için after insert triggerı yazarsınız ve tetiklediğinde istediğiniz alanı guncellersiniz. istead of için ise mesela herhangi bir tabloya instead of delete triggeri yazıp silme işlemi yerine active kolonuna 0 değerini atayabilirsiniz. tabi burada doğru satırların doğru değerlerini elde edebilmeniz için bu işlemler sırasında oluşan inserted ve deleted tablolarını çok iyi anlamanız gerekir, ayrıca trigger kullanmanın bütün risklerini de tartmaniz gerek.

Detay için:

https://docs.microsoft.com/en-us/sql/relational-databases/triggers/dml-triggers?view=sql-server-ver15





< Bu mesaj bu kişi tarafından değiştirildi alperepla -- 10 Kasım 2019; 7:14:2 >

< Bu ileti mobil sürüm kullanılarak atıldı >

A
6 yıl
Yüzbaşı

Üzerinden zaman geçmiş ancak biri bakarsa yanlış yönlendirmemesi açısından yazayım. Bu kod arkadaşın istediğini yapmaz görünen kadarı ile her bir insert işleminde bütün mesaj ve personel tablosunu join edip o kadar satır mesaj tablosuna giriş yapmaya çalışıyor gibi. Bunun yerine inserted tablosunu kullanıp mesaj tablosunu update etmeniz gerekir.



< Bu ileti mobil sürüm kullanılarak atıldı >


Bu mesajda bahsedilenler: @Algorithmus
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.