Perbedaan antara pemicu FOR dan AFTER?


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.


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.


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


1
Ungkapan ini "SETELAH adalah default ketika FOR adalah satu-satunya kata kunci yang ditentukan." sangat membingungkan. Mereka bisa mengatakannya dengan lebih baik.
FMFF
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.