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'.
serrement
la source

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
Wael Dalloul
la source
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 ...
Mark Kane
la source
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
kaptan
la source
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
Andrea
la source
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
Shahab Naseer
la source
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"
ar3003
la source
-1

Voici le moyen le plus simple

Essayez le code

ALTER TRIGGER trigger_name DISABLE

C'est tout :)

kavita londhe
la source
Ne fonctionne pas sur SQL Server> 2008 R2 et la question est pour MS SQL Server
kuklei