none
trigger ile tablo oluşturabilir miyim yoksa sadece tabloya insert işlemi mi yapabilirm? RRS feed

  • Soru

  • Merhaba,

    triggerla tablo oluşturamzsam da insert işlemi yapmak istiyorum  aşağıdaki kodu buldum ama bana çok fazla ve karışık geldi daha güzel ve sade bi yolunu bilen varsa yardım ederse sevinirim.Teşekkürler.İyi çalışmalar..

    8 Temmuz 2011 Cuma 11:16

Yanıtlar

  • trigger nedir, nasıl yazılırı mı öğrenmek istiyorsunuz yoksa daha spesifik birşey mi öğrenmek istiyorsunuz?

    CREATE TRIGGER trgTest
    ON Employees
    AFTER INSERT
    AS
      -- trigger' ın otomatik olarak yapacağı işler
    
    bu örnekte Employees tablosuna bir trigger yazılıyor. Employees tablosunda INSERT işlemi gerçekleştikten sonra bu trigger çalışacak ve içerisine yazılan işlemleri yapacak. trigger içerisinde tablo da oluşturabilirsiniz, öncesinde o isimde bir tablo olup olmadığını kontrol ederek tabii ki.

     

    • Yanıt Olarak İşaretleyen Serkan Bark 14 Temmuz 2011 Perşembe 11:34
    8 Temmuz 2011 Cuma 21:28
  • Merhaba,

    Trigger kullanarak A tablosuna bir kayıt girildiğinde başka bir tabloda da yeni bir kayıt oluşturabilirsin.

    Bunu SP içinden de yapabilirsin.

    Trigger ile yapmak işi garanti altına alır. Örneğin SP kullanmadan doğrudan elle tablo üzerindekayıt oluşturulursa ikinci tabloda log kaydı atlanabilir.

    Yalnız

    INSERT INTO Log VALUES('Takim Eklenemedi:'+@takimAd)
    
    


    kodunda bir problem var. @TakimAd NULL olduğunda bu duruma giriyor ve Concatenate işlemi de NULL olacaktır. Bu durumda da Log tablosuna NULL bir kayıt atmış olacaksın

     

    Örnekteki Trigger ile ilgili asıl problem ise, bu trigger kodunun sanki bir INSERT işleminde sadece bir kayıt girileceği üzerine tasarlanmış olması

    Yani

    INSERT INTO Takim SELECT .... FROM Takim2

    gibi bir kod büyük hatalara yol açabilir.

    O yüzden, özellikle değişkenler kullanarak yazılmış Trigger kodları potansiyel hatalar taşırlar. Bunların yerine SET based düşünerek çözümler üretmek de fayda var.

     

    Aşağıdaki örnekler yol gösterici olabilir

    http://www.kodyaz.com/articles/sql-trigger-example-in-sql-server-2008.aspx

    http://www.kodyaz.com/articles/sql-trigger-sql-server-trigger-example-to-log-changes-history.aspx

    http://www.kodyaz.com/articles/log-price-changes-using-sql-server-trigger-in-sql-server.aspx

     


    SQL Server and T-SQL Tutorials
    My Personal Site
    Our true mentor in life is science
    • Yanıt Olarak İşaretleyen Serkan Bark 14 Temmuz 2011 Perşembe 11:34
    11 Temmuz 2011 Pazartesi 07:51

Tüm Yanıtlar

  • Merhaba,

    triggerla tablo oluşturamzsam da insert işlemi yapmak istiyorum  aşağıdaki kodu buldum ama bana çok fazla ve karışık geldi daha güzel ve sade bi yolunu bilen varsa yardım ederse sevinirim.Teşekkürler.İyi çalışmalar..

     yazmayı unutmuşum=)aşağıdaki kod:

    CREATE TABLE Takim

    (

          Id          INT IDENTITY(1,1) NOT NULL,

          TakimAd     NVARCHAR(50) NULL,

          KurulusYil  INT NULL,

          Stad        NVARCHAR(50) NULL,

          Baskan      NVARCHAR(50) NULL,

          CONSTRAINT PK_Takim PRIMARY KEY(Id)

    )

     

    CREATE TABLE Log

    (

          Id          INT IDENTITY(1,1) NOT NULL,

          Aciklama    NVARCHAR(100) NULL,

          CONSTRAINT PK_Log PRIMARY KEY(Id)

    )



    CREATE TRIGGER TakimEkleniyor ON Takim

    INSTEAD OF INSERT

    AS

    BEGIN

          DECLARE @takimAd NVARCHAR(30)

          SET @takimAd = (SELECT Ad From INSERTED)

     

          IF(@takimAd IS NOT NULL)

          BEGIN

                INSERT INTO Satis.Takim

                SELECT Ad,Stad,Baskan,KurulusYil FROM INSERTED

          END

          ELSE

          BEGIN

                INSERT INTO Log VALUES('Takim Eklenemedi:'+@takimAd)

          END

    END

     

    CREATE TRIGGER TakimEklendi ON Takim

    AFTER INSERT

    AS

    BEGIN

          INSERT INTO Log

          SELECT 'Takım Eklendi->'+Ad+':'+Stad+':'+Baskan+':'+

                 CAST(KurulusYil AS CHAR(4)) FROM INSERTED

    END

     

    8 Temmuz 2011 Cuma 11:18
  • Store Procedure üzerindemi değişkenleri tanımlayıp , kayıt işlemleri yaptıracaksın ? Trigger herhangi bir fonksiyonu tetiklemek için kullanılır. Trigger olmadan da bunu yapabilirsiniz ama sorduğum gibi store procedure üzerinden mi kayıt işlemleri olacak?

    Her zaman iyi olmayı isteyin, mükemmel olun. ilkaytaskiran[at]hotmail[dot]com [dot] tr ilkaytaskiran@hotmail.com.tr
    8 Temmuz 2011 Cuma 11:27
  • store procedur kullannmadan sadece trigger ile tabloya kayıt yaptırmaz mıyım bana da biri sormuştu da o yüzden merak ettim.Önce store procedure yazıp sonra trigger kullanabilrim değil mi?
    8 Temmuz 2011 Cuma 12:07
  • Merhaba,

    Trigger adından anlasılacagı üzere bir olaydan tetiklenirler yani ilk olarak trigerdan bagımsız bir olaya gerceklesmesi egerkir ve trigger istediginz işlemi yapması için tetiklenir. Örneğin bir tabloya herhangibir yolla bir kayıt insert edebilirsiniz yada update edebilirsiniz bu olaylardan sonra eger tanımlamıssanız bir trigger tetiklenir ve istediginiz işlemleri yapar.

    8 Temmuz 2011 Cuma 12:22
  • Örnek verecek olursa trigger ile senin kayıt edeceğin sırada o kayıt varmı yok mu diye kontrol ettirebilirsin. Olay burda veri kaydetmek iken sen tetiklediğin (trigger) ile o verinin kaydedileceği anda böyle bir kayıt varmı yokmu diye sorgulayabilirsin. Trigger lar tam olarak bu gibi işlere yarar.Diğer konu ise veri eklemeyi insert ile yapabilirsin . Tablonu oluşturduktan sonra 

    Create table ...

    {}

    as

    begin

    insert komutu

    end

    şeklinde verilerini tanımladığın parametrelere göre içeri aldırırsın ve sql e kaydedersin


    Her zaman iyi olmayı isteyin, mükemmel olun. ilkaytaskiran[at]hotmail[dot]com [dot] tr ilkaytaskiran@hotmail.com.tr
    8 Temmuz 2011 Cuma 19:50
  • trigger nedir, nasıl yazılırı mı öğrenmek istiyorsunuz yoksa daha spesifik birşey mi öğrenmek istiyorsunuz?

    CREATE TRIGGER trgTest
    ON Employees
    AFTER INSERT
    AS
      -- trigger' ın otomatik olarak yapacağı işler
    
    bu örnekte Employees tablosuna bir trigger yazılıyor. Employees tablosunda INSERT işlemi gerçekleştikten sonra bu trigger çalışacak ve içerisine yazılan işlemleri yapacak. trigger içerisinde tablo da oluşturabilirsiniz, öncesinde o isimde bir tablo olup olmadığını kontrol ederek tabii ki.

     

    • Yanıt Olarak İşaretleyen Serkan Bark 14 Temmuz 2011 Perşembe 11:34
    8 Temmuz 2011 Cuma 21:28
  • Merhaba,

    Trigger kullanarak A tablosuna bir kayıt girildiğinde başka bir tabloda da yeni bir kayıt oluşturabilirsin.

    Bunu SP içinden de yapabilirsin.

    Trigger ile yapmak işi garanti altına alır. Örneğin SP kullanmadan doğrudan elle tablo üzerindekayıt oluşturulursa ikinci tabloda log kaydı atlanabilir.

    Yalnız

    INSERT INTO Log VALUES('Takim Eklenemedi:'+@takimAd)
    
    


    kodunda bir problem var. @TakimAd NULL olduğunda bu duruma giriyor ve Concatenate işlemi de NULL olacaktır. Bu durumda da Log tablosuna NULL bir kayıt atmış olacaksın

     

    Örnekteki Trigger ile ilgili asıl problem ise, bu trigger kodunun sanki bir INSERT işleminde sadece bir kayıt girileceği üzerine tasarlanmış olması

    Yani

    INSERT INTO Takim SELECT .... FROM Takim2

    gibi bir kod büyük hatalara yol açabilir.

    O yüzden, özellikle değişkenler kullanarak yazılmış Trigger kodları potansiyel hatalar taşırlar. Bunların yerine SET based düşünerek çözümler üretmek de fayda var.

     

    Aşağıdaki örnekler yol gösterici olabilir

    http://www.kodyaz.com/articles/sql-trigger-example-in-sql-server-2008.aspx

    http://www.kodyaz.com/articles/sql-trigger-sql-server-trigger-example-to-log-changes-history.aspx

    http://www.kodyaz.com/articles/log-price-changes-using-sql-server-trigger-in-sql-server.aspx

     


    SQL Server and T-SQL Tutorials
    My Personal Site
    Our true mentor in life is science
    • Yanıt Olarak İşaretleyen Serkan Bark 14 Temmuz 2011 Perşembe 11:34
    11 Temmuz 2011 Pazartesi 07:51