テーブルのSQLサーバーのトリガーを有効にするを無効にする


128

以下のようなプロシージャを1つ作成したいのですが、構文にエラーがあります。誰かが問題を指摘できますか?

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'.

回答:


242

代わりに次のコマンドを使用してください。

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name

3
SqlServerのどのバージョンがこれに適していますか?一方で、私のために働いていないDISABLE TRIGGER [dbo].[tr_name] on [schema].[table_name]働いていた
マズロー

1
正解です。しかし、実際には@pangステートメントは単純なものの代わりに修正を必要としません;!使用したいENABLE Triggerです。2008
ABS

データベース内のすべてのテーブルを実行する必要がある場合は、次を使用します。EXECUTE sp_msforeachtable "ALTER TABLE?disable trigger ALL" go
John Dyer

71

;SQLではDISABLE キーワードではないため、前の行は「a」で終わる必要があります。例えば:

BEGIN
;
DISABLE TRIGGER ...

10
私はこの答えをずっと好みます。問題に対処し、回避策の代わりに解決策を提供します。回避策がありますが、コンテキストのない回避策を盲目的に実行するのではなく、エラーが発生した理由を理解することが重要です。
Bpainter 2015年

13

マークが述べたように、前のステートメントはセミコロンで終了する必要があります。だからあなたは使うことができます:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name

2

新しい行のENABLE TRIGGERまたはDISABLE TRIGGERの後にGOと書き込みます。例:

DISABLE TRIGGER dbo.tr_name ON dbo.table_name

GO
-- some update statement

ENABLE TRIGGER dbo.tr_name  ON dbo.table_name

GO

0

以下は、トリガーを有効または無効にする動的スクリプトです。

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

ENABLE TRIGGERをソースから直接実行する場合:

このように書くことはできません:

Conn.Execute "ENABLE TRIGGER trigger_name ON table_name"

代わりに、次のように書くことができます:

Conn.Execute "ALTER TABLE table_name DISABLE TRIGGER trigger_name"

-1

以下は最も簡単な方法です

コードを試す

ALTER TRIGGER trigger_name DISABLE

それでおしまい :)


SQL Server> 2008 R2で動作して
おら
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.