Desativar Ativar servidor SQL Trigger para uma tabela


128

Eu quero criar um proc como abaixo, mas tem erro na sintaxe. Alguém poderia apontar o 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'.

Respostas:


242

use os seguintes comandos:

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name

3
Para quais versões do SqlServer isso é bom? não funciona para mim, enquanto DISABLE TRIGGER [dbo].[tr_name] on [schema].[table_name]trabalhava
Maslow

1
Sua resposta está correta. Mas, na verdade, as instruções @pang não precisam de nenhuma correção, em vez de uma simples ;! Eu prefiro usar ENABLE Trigger. É aplicável em todos os servidores SQL a partir de 2008. #
ABS

Se você precisa fazer todas as tabelas em um banco de dados usar este: EXECUTAR sp_msforeachtable "ALTER TABLE gatilho desativar todos?" Ir
John Dyer

71

A linha anterior precisa terminar com um ;porque no SQL DISABLE não é uma palavra-chave . Por exemplo:

BEGIN
;
DISABLE TRIGGER ...

10
Eu prefiro muito esta resposta. Ele resolve o problema e fornece a solução em vez de uma solução alternativa. Embora as soluções alternativas tenham seu lugar, é importante entender por que ocorreu um erro em vez de seguir cegamente uma solução alternativa sem contexto.
Bpainter

13

Como Marcos mencionou, a declaração anterior deve terminar em ponto e vírgula. Então você pode usar:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name

2

Após o ENABLE TRIGGER OU DISABLE TRIGGER em uma nova linha, escreva GO, Exemplo:

DISABLE TRIGGER dbo.tr_name ON dbo.table_name

GO
-- some update statement

ENABLE TRIGGER dbo.tr_name  ON dbo.table_name

GO

0

Abaixo está o Script dinâmico para ativar ou desativar os gatilhos.

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 você deseja executar ENABLE TRIGGER diretamente da fonte:

não podemos escrever assim:

Conn.Execute "ENABLE TRIGGER trigger_name ON table_name"

em vez disso, podemos escrever:

Conn.Execute "ALTER TABLE table_name DISABLE TRIGGER trigger_name"

-1

Abaixo está a maneira mais simples

Experimente o código

ALTER TRIGGER trigger_name DISABLE

É isso aí :)


Não funciona no SQL Server> 2008 R2 ea pergunta é para o MS SQL Server
kuklei
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.