Как я могу создать отключенный триггер в SQL Server 2005? - PullRequest
7 голосов
/ 30 августа 2010

При использовании Oracle вы можете создать отключенный триггер, указав слово DISABLE перед телом триггера.Как я могу добиться того же эффекта в Sql Server?

Ответы [ 5 ]

15 голосов
/ 30 августа 2010

Если вам действительно необходимо создать отключенный триггер, создайте и отключите его в транзакции:

begin tran
go
create trigger t_i on t after insert as begin /* trigger body */ end
go
disable trigger t_i on t
commit
go

GO есть, потому что CREATE TRIGGER должен быть первым оператором в пакете, но в зависимости от того,разверните свой код, возможно, вы сделаете его более аккуратным.

1 голос
/ 25 июля 2013

Я сделал так, чтобы EXEC как создать, так и отключить:

EXEC('CREATE TRIGGER trigger_on_myTable ON myTable <Trigger body> ');

EXEC('DISABLE TRIGGER trigger_on_myTable ON myTable');

Это позволило мне создать и отключить в том же сценарии без каких-либо GO.

0 голосов
/ 11 апреля 2018

Если вы предпочитаете решение, которое не требует транзакции, но также исключает вероятность срабатывания триггера и его выполнения между моментом его создания и моментом его отключения, тогда вы можете создать триггер с в основном в нем нет кода, затем отключите его, а затем измените его, чтобы включить его фактическое тело:

create trigger dbo.MyTrigger
    on dbo.MyTable
    after insert

as

declare @Foo int;

--Trigger body must have at least a statement (or an "external name") so that's why the above dummy declare.

go

disable trigger dbo.MyTrigger
    on dbo.MyTable;

go

alter trigger dbo.MyTrigger
    on dbo.MyTable
    after insert

as

declare @Foo int;

--Remove above declare statement and insert actual trigger code here.

go
0 голосов
/ 30 августа 2010

T-SQL предоставляет инструкцию DISABLE TRIGGER, которая выполняет то же самое. Вы можете найти подробности здесь: DISABLE TRIGGER SYNTAX

0 голосов
/ 30 августа 2010

В управляющей студии разверните папку Trigger под таблицей и щелкните правой кнопкой мыши Trigger and Disable.

DISABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]

MSDN: ОТКЛЮЧИТЬ ТРИГГЕР (Transact-SQL)

ENABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]

MSDN: ВКЛЮЧИТЬ ТРИГГЕР (Transact-SQL)

SQL-сервер отключить все-триггера-на-базу-Disable-все-спусковых-на-все-сервера

...