Deshabilitar Habilitar el servidor SQL Trigger para una tabla


128

Quiero crear un proceso como el siguiente, pero tiene un error en la sintaxis. ¿Alguien podría señalar el 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'.

Respuestas:


242

use los siguientes comandos en su lugar:

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name

3
¿Para qué versiones de SqlServer es bueno? no funcionaba para mí, mientras DISABLE TRIGGER [dbo].[tr_name] on [schema].[table_name]trabajaba
Maslow

1
Tu respuesta es correcta. ¡Pero en realidad las declaraciones @pang no necesitan ninguna solución en lugar de una simple ;! Yo prefiero usar ENABLE Trigger. Es aplicable en todos los servidores SQL a partir de 2008.
ABS

Si necesita hacer todas las tablas en una base de datos, use esto: EJECUTAR sp_msforeachtable "¿ALTERAR TABLA? Deshabilitar el disparador TODO" ir
John Dyer

72

La línea anterior debe terminar con un ;porque en SQL DISABLE no es una palabra clave . Por ejemplo:

BEGIN
;
DISABLE TRIGGER ...

11
Prefiero esta respuesta. Aborda el problema y ofrece la solución en lugar de una solución alternativa. Si bien las soluciones tienen su lugar, es importante comprender por qué se produjo un error en lugar de seguir ciegamente una solución sin contexto.
Bpainter

13

Como Mark mencionó, la declaración anterior debe terminar en punto y coma. Entonces puedes usar:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name

2

Después de HABILITAR EL DISPARADOR O DESACTIVAR EL DISPARADOR en una nueva línea, escriba GO, Ejemplo:

DISABLE TRIGGER dbo.tr_name ON dbo.table_name

GO
-- some update statement

ENABLE TRIGGER dbo.tr_name  ON dbo.table_name

GO

0

A continuación se muestra el script dinámico para habilitar o deshabilitar los activadores.

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 desea ejecutar ENABLE TRIGGER directamente desde la fuente:

no podemos escribir así:

Conn.Execute "ENABLE TRIGGER trigger_name ON table_name"

en cambio, podemos escribir:

Conn.Execute "ALTER TABLE table_name DISABLE TRIGGER trigger_name"

-1

A continuación se muestra la forma más sencilla.

Prueba el código

ALTER TRIGGER trigger_name DISABLE

Eso es :)


No funciona en SQL Server> 2008 R2 y la pregunta es para MS SQL Server
kuklei
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.