Disabilita Abilita Trigger SQL server per una tabella


128

Voglio creare un proc come di seguito ma ha un errore sulla sintassi. Qualcuno potrebbe sottolineare il problema?

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'.

Risposte:


242

utilizzare invece i seguenti comandi:

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name

3
per quali versioni di SqlServer è utile? non funziona per me, mentre DISABLE TRIGGER [dbo].[tr_name] on [schema].[table_name]lavorava
Maslow,

1
La tua risposta è corretta Ma in realtà le istruzioni @pang non hanno bisogno di alcuna correzione anziché di una semplice ;! Preferisco usare ENABLE Trigger. È applicabile su tutti i server SQL a partire dal 2008.
ABS

Se è necessario eseguire tutte le tabelle in un database, utilizzare questo: EXECUTE sp_msforeachtable "ALTER TABLE? Disable trigger ALL" go
John Dyer,

72

La riga prima deve terminare con a ; perché in SQL DISABLE non è una parola chiave . Per esempio:

BEGIN
;
DISABLE TRIGGER ...

11
Preferisco di gran lunga questa risposta. Risolve il problema e offre la soluzione anziché una soluzione alternativa. Mentre le soluzioni alternative hanno il loro posto, è importante capire perché si è verificato un errore invece di seguire ciecamente una soluzione alternativa senza contesto.
Bpainter,

13

Come accennato da Mark, la precedente dichiarazione dovrebbe essere terminata in punto e virgola. Quindi puoi usare:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name

2

Dopo aver ABILITATO IL TRIGGER O DISATTIVATO il TRIGGER in una nuova riga scrivi GO, Esempio:

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 seguito è riportato lo script dinamico per abilitare o disabilitare i trigger.

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

se si desidera eseguire ENABLE TRIGGER direttamente dalla fonte:

non possiamo scrivere così:

Conn.Execute "ENABLE TRIGGER trigger_name ON table_name"

possiamo invece scrivere:

Conn.Execute "ALTER TABLE table_name DISABLE TRIGGER trigger_name"

-1

Di seguito è riportato il modo più semplice

Prova il codice

ALTER TRIGGER trigger_name DISABLE

Questo è tutto :)


Non funziona su SQL Server> 2008 R2 e la domanda è per MS SQL Server
kuklei
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.