Şimdi Ara

Insert sonrası update trigger

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
8
Cevap
1
Favori
539
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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 |
    +-----------+---------+------+-----+---------+----------------+



  • 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.
  • Transaction kullanabilirsen transaction kullan. İlle de trigger mı kullanman gerekiyor?
  • 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.
  • 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ı >




  • Algorithmus kullanıcısına yanıt
    Ü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ı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.