Bagikan melalui


Membuat pemicu DML

Berlaku untuk: SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Artikel ini menjelaskan cara membuat pemicu Transact-SQL Data Manipulation Language (DML) dengan SQL Server Management Studio, atau pernyataan Transact-SQL CREATE TRIGGER .

Sampel kode dalam artikel ini menggunakan database sampel AdventureWorks2022 atau AdventureWorksDW2022, yang dapat Anda unduh dari halaman beranda Sampel dan Proyek Komunitas Microsoft SQL Server.

Keterbatasan

Untuk daftar batasan dan pembatasan yang terkait dengan pembuatan pemicu DML, lihat CREATE TRIGGER.

Izin

ALTER Memerlukan izin pada tabel atau tampilan tempat pemicu sedang dibuat.

Cara membuat pemicu DML

Anda dapat menggunakan salah satu metode berikut:

Menggunakan SQL Server Management Studio

  1. Di Object Explorer, sambungkan ke instans Mesin Database lalu perluas instans tersebut.

  2. Perluas Database, perluas AdventureWorks2022 database, perluas Tabel, lalu perluas tabel Purchasing.PurchaseOrderHeader.

  3. Klik kanan Pemicu, lalu pilih Pemicu Baru.

  4. Pada menu Kueri, pilih Tentukan Nilai untuk Parameter Template. Atau, Anda dapat menekan (Ctrl-Shift-M) untuk membuka kotak dialog Tentukan Nilai untuk Parameter Templat.

  5. Dalam kotak dialog Tentukan Nilai untuk Parameter Templat, masukkan nilai berikut untuk parameter yang diperlihatkan.

    Parameter Nilai
    Penulis Namamu
    Buat Tanggal Tanggal hari ini
    Deskripsi Memeriksa peringkat kredit vendor sebelum mengizinkan pesanan pembelian baru dengan vendor dimasukkan.
    Schema_Name Purchasing
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement Hapus UPDATE dan DELETE dari daftar.
  6. Pilih OK.

  7. Di Editor Kueri, ganti komentar -- Insert statements for trigger here dengan pernyataan berikut:

    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. Untuk memverifikasi sintaks valid, pada menu Kueri , pilih Uraikan. Jika pesan kesalahan dikembalikan, bandingkan pernyataan dengan blok kode sebelumnya, koreksi sesuai kebutuhan, dan ulangi langkah ini.

  9. Untuk membuat pemicu DML, dari menu Kueri , pilih Jalankan. Pemicu DML dibuat sebagai objek dalam database.

  10. Untuk melihat pemicu DML yang tercantum di Object Explorer, klik kanan Pemicu dan pilih Refresh.

Menggunakan Transact-SQL

  1. Di Object Explorer, sambungkan ke instans Mesin Database lalu perluas instans tersebut.

  2. Dari menu File , pilih Kueri Baru.

  3. Salin dan tempel contoh berikut ke dalam jendela kueri dan pilih Jalankan. Contoh ini membuat pemicu DML tersimpan yang sama seperti sebelumnya. Pemicu ini berlaku untuk penyisipan baris multirow dan tunggal, dan optimal untuk sisipan baris tunggal.

    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;