2009-09-07 7 views
98

Je veux créer un proc comme ci-dessous mais il a une erreur sur la syntaxe. Quelqu'un pourrait-il signaler le problème?Désactiver Activer le serveur SQL de déclenchement

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épondre

189

utiliser les commandes suivantes à la place:

ALTER TABLE table_name DISABLE TRIGGER tr_name 

ALTER TABLE table_name ENABLE TRIGGER tr_name 
+0

pour quelles versions de SqlServer est-ce bon? ne fonctionne pas pour moi, alors que 'DISABLE TRIGGER [dbo]. [tr_name] sur [schéma]. [nom_table]' travaillé – Maslow

+0

Cela fonctionne pour moi (Sql Server 2014). –

+0

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

53

La ligne avant de mettre fin à des besoins avec un ; parce que dans SQL DISABLEis not a keyword. Par exemple:

BEGIN 
; 
DISABLE TRIGGER ... 
+7

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

+2

Ceci devrait être marqué comme la bonne réponse. – eddiewould

11

Comme indiqué précédemment, l'instruction précédente doit être terminée par un point-virgule. Vous pouvez donc utiliser:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name 
0

est inférieure à la façon

simple Essayez le code

ALTER TRIGGER trigger_name DISABLE

Ca y est :)

0

Après ENABLE TRIGGER OU DISABLE TRIGGER dans un nouvelle ligne écrire 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 
Questions connexes