Nonaktifkan Aktifkan Pemicu SQL server untuk tabel


128

Saya ingin membuat satu proc seperti di bawah ini tetapi ada kesalahan pada sintaksis. Adakah yang bisa menunjukkan masalah?

Create PROCEDURE [dbo].[my_proc] AS

BEGIN

DISABLE TRIGGER dbo.tr_name ON dbo.table_name

-- some update statement

ENABLE TRIGGER dbo.tr_name  ON dbo.table_name

END

** Error Message : Incorrect syntax near 'ENABLE'.

Jawaban:


242

gunakan perintah berikut sebagai gantinya:

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name

3
versi SqlServer apa ini baik untuk? tidak bekerja untuk saya, saat DISABLE TRIGGER [dbo].[tr_name] on [schema].[table_name]bekerja
Maslow

1
Jawaban Anda benar. Tapi sebenarnya pernyataan @pang tidak perlu diperbaiki, bukan sederhana ;! Saya lebih suka menggunakan ENABLE Trigger. Ini berlaku pada semua SQL Server mulai tahun 2008.
ABS

Jika Anda perlu melakukan semua tabel dalam database, gunakan ini: EXECUTE sp_msforeachtable "ALTER TABLE? Nonaktifkan trigger ALL ALL"
John Dyer

72

Baris sebelum harus diakhiri dengan ;karena dalam SQL DISABLE bukan kata kunci . Sebagai contoh:

BEGIN
;
DISABLE TRIGGER ...

11
Saya lebih suka jawaban ini. Ini mengatasi masalah dan memberikan solusi alih-alih solusi. Sementara pemecahan masalah memiliki tempatnya, penting untuk memahami mengapa kesalahan terjadi alih-alih secara membabi buta mengikuti pemecahan masalah tanpa konteks.
Bpainter

13

Seperti yang disebutkan Markus, pernyataan sebelumnya harus diakhiri dengan titik koma. Jadi Anda bisa menggunakan:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name

2

Setelah ENABLE TRIGGER ATAU DISABLE TRIGGER di baris baru tulis GO, Contoh:

DISABLE TRIGGER dbo.tr_name ON dbo.table_name

GO
-- some update statement

ENABLE TRIGGER dbo.tr_name  ON dbo.table_name

GO

0

Di bawah ini adalah Dynamic Script untuk mengaktifkan atau menonaktifkan Pemicu.

select 'alter table '+ (select Schema_name(schema_id) from sys.objects o 
where o.object_id = parent_id) + '.'+object_name(parent_id) + ' ENABLE TRIGGER '+
Name as EnableScript,*
from sys.triggers t 
where is_disabled = 1

0

jika Anda ingin menjalankan ENABLE TRIGGER Langsung Dari Sumber:

kita tidak bisa menulis seperti ini:

Conn.Execute "ENABLE TRIGGER trigger_name ON table_name"

alih-alih, kita dapat menulis:

Conn.Execute "ALTER TABLE table_name DISABLE TRIGGER trigger_name"

-1

Di bawah ini adalah cara paling sederhana

Coba kodenya

ALTER TRIGGER trigger_name DISABLE

Itu dia :)


Tidak bekerja pada SQL Server> 2008 R2 dan pertanyaannya adalah untuk MS SQL Server
kuklei
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.