Aracılığıyla paylaş


DML tetikleyicileri oluşturma

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Bu makalede, SQL Server Management Studio ile Transact-SQL Veri İşleme Dili (DML) tetikleyicisinin veya Transact-SQL CREATE TRIGGER deyiminin nasıl oluşturulacağı açıklanır.

Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.

Sınırlamalar

DML tetikleyicileri oluşturmayla ilgili sınırlamaların ve kısıtlamaların listesi için bkz. CREATE TRIGGER.

İzinler

ALTER Tetikleyicinin oluşturulduğu tabloda veya görünümde izin gerektirir.

DML tetikleyicisi oluşturma

Aşağıdaki yöntemlerden birini kullanabilirsiniz:

SQL Server Management Studio'yu kullanma

  1. Nesne Gezginiveritabanı altyapısının bir örneğine bağlanın ve bu örneği genişletin.

  2. Veritabanları'nıAdventureWorks2025 genişletin, veritabanını genişletin, Tablolar'ı genişletin ve sonra tabloyu Purchasing.PurchaseOrderHeadergenişletin.

  3. Tetikleyicileri'ne sağ tıklayın ve yeni tetikleyici seçin.

  4. Sorgu menüsünde Şablon Parametreleri için Değer Belirt'i seçin. Alternatif olarak, (Ctrl-Shift-M) tuşlarına basarak şablon parametreleri için değerleri belirtin iletişim kutusunu açabilirsiniz.

  5. Şablon Parametreleri için Değerleri Belirt iletişim kutusunda, gösterilen parametreler için aşağıdaki değerleri girin.

    Parametre Değer
    Yazar Adınız
    Tarih Oluştur bugünün tarihi
    Açıklama Satıcıya yeni bir satınalma siparişi eklenmesine izin vermeden önce satıcının kredi derecelendirmesini denetler.
    Schema_Name Purchasing
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement Listeden ve UPDATE öğesini kaldırınDELETE.
  6. Tamam'ı seçin.

  7. Sorgu Düzenleyicisi'de, açıklama -- Insert statements for trigger here'yi aşağıdaki ifade ile değiştir:

    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öz diziminin geçerli olduğunu doğrulamak için Sorgu menüsünde Ayrıştır'ı seçin. Hata iletisi döndürülürse deyimini önceki kod bloğuyla karşılaştırın, gerektiği gibi düzeltin ve bu adımı yineleyin.

  9. DML tetikleyicisini oluşturmak için Sorgu menüsünde Yürüt'e tıklayın. DML tetikleyicisi veritabanında bir nesne olarak oluşturulur.

  10. Nesne Gezgini'nde listelenen DML tetikleyicisini görmek için Tetikleyiciler öğesine sağ tıklayın ve "Yenile"seçeneğini seçin.

Transact-SQL kullanma

  1. Nesne Gezginiveritabanı altyapısının bir örneğine bağlanın ve bu örneği genişletin.

  2. Dosyamenüsünden Yeni Sorgu'yu seçin.

  3. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Yürüt'e tıklayın. Bu örnek, öncekiyle aynı depolanmış DML tetikleyicisini oluşturur. Tetikleyici çok satırlı ve tek satırlı eklemeler için geçerlidir ve tek satır eklemeleri için en uygun değerdir.

    USE AdventureWorks2022;
    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;