Perbedaan antara pemicu FOR dan AFTER?

120

Apa perbedaan antara FORdan AFTERpemicu?

sqlchild.dll
sumber
5
+1: Saya membaca Artikel Online Buku SQL Server tentang Pemicu dan berakhir dengan pertanyaan yang sama persis
pfunk
Saya menemukan artikel ini berguna: dotnettricks.com/learn/sqlserver/…
Matt

Jawaban:

153

Tidak ada bedanya, mereka melakukan hal yang sama.

CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE

Sama dengan

CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE

Sebuah INSTEAD OFpemicu berbeda, dan kebakaran sebelum dan bukannya insert dan dapat digunakan pada pandangan, untuk memasukkan nilai-nilai yang sesuai ke tabel yang mendasari.

Ben
sumber
14
Saya menyukai komentar tentang sisipan ke tampilan menggunakan pemicu. Info yang sangat berguna. Bersulang.
Mariusz
Maaf Tuan @ Ben, Apa skenario untuk dimasukkan ke dalam tampilan? Terima kasih ^ - ^
Jeancarlo Fontalvo
@JeancarloFontalvo, 1) kompatibilitas. Tabel yang mendasari dapat berubah asalkan tampilan tetap sama. 2) kontrol akses, pengguna tertentu mungkin memiliki izin untuk menulis ke kolom tertentu saja.
Ben
17

@ Ben benar sekali.

Berikut adalah artikel MSDN Menjelajahi Pemicu SQL Server

Paragraf dari artikel:

Sintaks tersebut juga dapat diterima di versi SQL Server yang lebih lama. Namun, sekarang ada dua jenis pemicu di SQL Server 2000, saya lebih suka menyebut pemicu FOR sebagai pemicu SETELAH. Jadi, untuk sisa artikel ini saya akan merujuk pada pemicu SETELAH atau BUKAN.

Seperti pemicu AFTER yang Anda lihat sebelumnya, pemicu ini mencegah perubahan dibuat ke bidang nama belakang. Namun, ini menerapkan aturan bisnis ini secara berbeda dari contoh sebelumnya. Karena pemicu BUKAN AKAN diaktifkan di tempat pernyataan UPDATE, pemicu BUKAN DARI kemudian mengevaluasi apakah uji aturan bisnis berhasil atau tidak. Jika uji aturan bisnis lulus, agar pembaruan terjadi, pemicu BUKAN harus secara eksplisit memanggil pernyataan UPDATE lagi.

Waqas Raja
sumber
4

SETELAH menentukan bahwa pemicu DML diaktifkan hanya ketika semua operasi yang ditentukan dalam pernyataan SQL pemicu telah berhasil dijalankan. Semua tindakan kaskade referensial dan pemeriksaan batasan juga harus berhasil sebelum pemicu ini diaktifkan. SETELAH adalah default ketika FOR adalah satu-satunya kata kunci yang ditentukan.

Pemicu AFTER tidak dapat ditentukan pada tampilan.

INSTEAD OF Menentukan bahwa pemicu DML dijalankan sebagai ganti pemicu pernyataan SQL, oleh karena itu, menimpa tindakan dari pernyataan pemicu. INSTEAD OF tidak dapat ditentukan untuk DDL atau pemicu logon.

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql

Nour El-Hoda
sumber
1
Ungkapan ini "SETELAH adalah default ketika FOR adalah satu-satunya kata kunci yang ditentukan." sangat membingungkan. Mereka bisa mengatakannya dengan lebih baik.
FMFF