Share via


clr Tetikleyicileri oluşturma

Bu konuda nasıl oluşturulacağı açıklanır bir Transact-SQLdml tetikleyici kullanarak SQL Server Management Studiokullanarak Transact-SQLTETIKLEYICI create deyimi.

Başlamadan Önce

Sınırlamalar ve Kısıtlamalar

dml Tetikleyiciler oluşturmayla ilgili kısıtlamaları ve sınırlamaları bir listesi için bkz: CREATE TRIGGER (Transact-SQL).

İzinler

Tablo veya Görünüm tetikleyici oluşturulmaktadır alter izni gerektirir.

dml tetikleyici oluşturma

Aşağıdakilerden birini kullanabilirsiniz:

  • SQL Server Management Studio

  • Transact-SQL

SQL Server Management Studio Kullanarak

  1. İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısıve bu örneği genişletin.

  2. Genişletme veritabanları, genişletme AdventureWorks2012 veritabanı, Genişlet tablolar ve tablo genişletin Purchasing.PurchaseOrderHeader.

  3. Sağ Tetikleyicilerive seçin Yeni Tetikleyici.

  4. Tarih sorgu menüsünü tıklayın Şablon parametreler için değerler belirtin. Bunun yerine açmak için (Ctrl-Shift-m) basabilirsiniz Şablon parametreler için değerler belirtin iletişim kutusu.

  5. İçinde Şablon parametreler için değerler belirtin iletişim kutusunda, gösterilen parametreler için aşağıdaki değerleri girin.

    Parametre

    Değer

    Yazar

    Your name

    Oluşturma tarihi

    Today's date

    Açıklama

    Satıcının kredi derecelendirme eklenecek satıcı ile yeni bir satınalma siparişi vermeden önce denetler.

    Schema_Name

    Satın alma

    Trigger_Name

    NewPODetail2

    Table_Name

    PurchaseOrderDetail

    Data_Modification_Statement

    GÜNCELLEŞTİRMEYİ kaldırmak ve listeden SİLEBİLİRSİNİZ.

  6. Click OK.

  7. İçinde Sorgu Düzenleyicisi, açıklamayı değiştirin -- Insert statements for trigger hereaşağıdaki deyimi ile:

    IF @@ROWCOUNT = 1
    BEGIN
       UPDATE Purchasing.PurchaseOrderHeader
       SET SubTotal = SubTotal + LineTotal
       FROM inserted
       WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID
    
    END
    ELSE
    BEGIN
          UPDATE Purchasing.PurchaseOrderHeader
       SET SubTotal = SubTotal + 
          (SELECT SUM(LineTotal)
          FROM inserted
          WHERE PurchaseOrderHeader.PurchaseOrderID
           = inserted.PurchaseOrderID)
       WHERE PurchaseOrderHeader.PurchaseOrderID IN
          (SELECT PurchaseOrderID FROM inserted)
    END;
    
  8. Sözdizimi geçerli, üzerinde doğrulamak için sorgu menüsünden tıklatın ayrıştırma. Bir hata iletisi döndürülür, deyim üzerinde ve gerektiğinde doğru bilgilerle karşılaştırmak ve bu adımı yineleyin.

  9. dml tetikleyici oluşturmak için sorgu menüsünü tıklayın Execute. dml tetikleyici veritabanındaki bir nesne oluşturulur.

  10. Nesne Explorer'da listelenen dml tetikleyici görmek için sağ Tetikleyicileri ve yenilemek.

[Üst]

Transact-SQL'i Kullanma

  1. İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısıve bu örneği genişletin.

  2. Dan Dosya menüsünü tıklayın Yeni sorgu.

  3. Kopyalama ve aşağıdaki örnek sorgu penceresine yapıştırın ve tıkırtı Execute. Bu örnek, yukarıdaki gibi aynı saklı dml tetikleyici oluşturur.

    -- Trigger valid for multirow and single row inserts
    -- and optimal for single row inserts.
    USE AdventureWorks2012;
    GO
    CREATE TRIGGER NewPODetail3
    ON Purchasing.PurchaseOrderDetail
    FOR INSERT AS
    IF @@ROWCOUNT = 1
    BEGIN
       UPDATE Purchasing.PurchaseOrderHeader
       SET SubTotal = SubTotal + LineTotal
       FROM inserted
       WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID
    
    END
    ELSE
    BEGIN
          UPDATE Purchasing.PurchaseOrderHeader
       SET SubTotal = SubTotal + 
          (SELECT SUM(LineTotal)
          FROM inserted
          WHERE PurchaseOrderHeader.PurchaseOrderID
           = inserted.PurchaseOrderID)
       WHERE PurchaseOrderHeader.PurchaseOrderID IN
          (SELECT PurchaseOrderID FROM inserted)
    END;
    

[Üst]