Désactiver Activer le serveur SQL de déclenchement pour une table


128

Je veux créer un proc comme ci-dessous mais il y a une erreur de syntaxe. Quelqu'un pourrait-il signaler le problème?

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

Réponses:


242

utilisez plutôt les commandes suivantes:

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name

3
à quelles versions de SqlServer est-ce bon? ne travaille pas pour moi, pendant que je DISABLE TRIGGER [dbo].[tr_name] on [schema].[table_name]travaillais
Maslow

1
Votre réponse est correcte. Mais en réalité, les instructions @pang n'ont besoin d'aucune correction au lieu d'un simple ;! Je préfère utiliser ENABLE Trigger. Il est applicable sur tous les serveurs SQL à partir de 2008.
ABS

Si vous avez besoin de faire toutes les tables d'une base de données, utilisez ceci: EXECUTE sp_msforeachtable "ALTER TABLE? Disable trigger ALL" go
John Dyer

72

La ligne avant doit se terminer par un ;car en SQL DISABLE n'est pas un mot-clé . Par exemple:

BEGIN
;
DISABLE TRIGGER ...

11
Je préfère de loin cette réponse. Il résout le problème et donne la solution au lieu d'une solution de contournement. Bien que les solutions de contournement aient leur place, il est important de comprendre pourquoi une erreur s'est produite au lieu de suivre aveuglément une solution de contournement sans contexte.
Bpainter

13

Comme Mark l'a mentionné, l'instruction précédente doit se terminer par un point-virgule. Vous pouvez donc utiliser:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name

2

Après le ENABLE TRIGGER OU DISABLE TRIGGER dans une nouvelle ligne, écrivez GO, Exemple:

DISABLE TRIGGER dbo.tr_name ON dbo.table_name

GO
-- some update statement

ENABLE TRIGGER dbo.tr_name  ON dbo.table_name

GO

0

Vous trouverez ci-dessous le script dynamique pour activer ou désactiver les déclencheurs.

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

si vous souhaitez exécuter ENABLE TRIGGER directement depuis la source:

on ne peut pas écrire comme ça:

Conn.Execute "ENABLE TRIGGER trigger_name ON table_name"

à la place, nous pouvons écrire:

Conn.Execute "ALTER TABLE table_name DISABLE TRIGGER trigger_name"

-1

Voici le moyen le plus simple

Essayez le code

ALTER TRIGGER trigger_name DISABLE

C'est tout :)


Ne fonctionne pas sur SQL Server> 2008 R2 et la question est pour MS SQL Server
kuklei
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.