2017-04-24 9 views
0

更新ステートメントの前にトリガーを無効にし、SQL Serverの更新ステートメントの後で再度有効にする方法はありますか?更新ステートメントの前にトリガーを無効にし、SQL Serverの更新ステートメントの後で再び有効にする方法はありますか?

  • 無効にトリガー
  • Update Table_name set column = 'col' where something
  • トリガーを有効にします。

このT-SQLコードをSQL Serverに書き込む方法を教えてください。

+0

どのコードを試しましたか? https://docs.microsoft.com/en-us/sql/t-sql/statements/disable-trigger-transact-sql – lit

答えて

2
ALTER TABLE table_name DISABLE TRIGGER tr_name 

更新...

ALTER TABLE table_name ENABLE TRIGGER tr_name 
+0

これはスレッドセーフではないことに注意してください...単一ユーザーの状況でうまく動作しますテーブルを更新してトリガーを呼び出すクライアントが複数ある場合、予期しない動作が発生する可能性があります。これは、「ローカル問題のグローバルな解決策」とも呼ばれます。 – pmbAustin

+0

これはtr_nameです。 ? – Sandy777

+0

これはトリガー名です –

0

代わりのトリガーを無効に私は、このようSET CONTEXT_INFOref)とCONTEXT_INFO()ref)を使用します

を[1] Iトリガ

を変化させます
ALTER TRIGGER ... 
AFTER UPDATE 
ON dbo.MyTable 
AS 
BEGIN 
    IF CONTEXT_INFO() = 0x1256698456 
    BEGIN 
     RETURN 
    END 

    ... original source code ... 
END 

[2]私はがトリガーを活性化させるべきではないと任意のUPDATE文の前に

SET CONTEXT_INFO 0x1256698456 
UPDATE dbo.MyTable SET Col1 = 'Val1' WHERE ID = @param 
SET CONTEXT_INFO 0x 

。この場合、トリガは有効になりますが、コンテキスト情報が0x1256698456の場合、元のソースコードを実行せずに終了します。

関連する問題