DML トリガーの変更または名前の変更

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

この記事では、SQL Server Management Studio または Transact-SQL を使用して、SQL Server で DML トリガーを修正または名前を変更する方法について説明します。

制限事項

トリガーの名前を変更する場合、トリガーは現在のデータベース内にある必要があり、新しい名前は 識別子に関するルールに従っている必要があります。

推奨事項

sp_rename ストアド プロシージャを使用してトリガーの名前を変更しないでください。 オブジェクト名の一部または全部を変更すると、スクリプトおよびストアド プロシージャが壊れる可能性があります。 トリガーの名前を変更しても、sys.sql_modules カタログ ビューの definition 列にある、対応するオブジェクトの名前は変更されません。 トリガーを削除してから再作成することをお勧めします。

DML トリガーで参照されるオブジェクトの名前を変更する際には、新しい名前を反映するようにトリガーを変更する必要があります。 したがって、オブジェクトの名前を変更する前に、まずオブジェクトの依存関係を表示して、オブジェクト名の変更によりトリガーが影響を受けるかどうかを確認してください。

DML トリガーは、定義が暗号化されるように変更することもできます。

トリガーの依存関係を表示するには、SQL Server Management Studio または次の関数およびカタログ ビューを使用できます。

アクセス許可

DML トリガーを変更するには、トリガーが定義されているテーブルやビューに対する ALTER 権限が必要です。

SQL Server Management Studio を使用します。

DML トリガーを変更する

  1. オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。

  2. 目的のデータベースを展開し、 [テーブル]を展開します。次に、変更するトリガーが格納されているテーブルを展開します。

  3. [トリガー]を展開します。変更するトリガーを右クリックし、[変更]を選択します。

  4. トリガーを変更し、[実行]を選択します。

DML トリガーの名前を変更する

  1. 名前を変更するDML トリガーを削除または無効にします。
  2. 新しい名前を指定して、新しいDML トリガーを作成します。

Transact-SQL の使用

ALTER TRIGGER を使用してトリガーを変更する

  1. データベース エンジンに接続します。

  2. 標準バーから、 [新しいクエリ] を選択します。

  3. 次の例をコピーし、クエリに貼り付けます。 1 つ目の例を実行して、ユーザーが SalesPersonQuotaHistory テーブルのデータの追加や変更を行おうとしたときにユーザー定義のメッセージを出力する DML トリガーを作成します。 ALTER TRIGGER ステートメントを実行して、 INSERT アクティビティのときだけトリガーが発生するように変更します。 このトリガーは、テーブルの更新や行の挿入を行うユーザーに対して、 Compensation 部門にも変更を知らせる必要があることを連絡できるので有用です。

    1. トリガーを作成します。

      USE AdventureWorks2022;
      GO
      
      IF OBJECT_ID(N'Sales.bonus_reminder', N'TR') IS NOT NULL
          DROP TRIGGER Sales.bonus_reminder;
      GO
      
      CREATE TRIGGER Sales.bonus_reminder
          ON Sales.SalesPersonQuotaHistory WITH ENCRYPTION
          AFTER INSERT, UPDATE
      AS RAISERROR ('Notify Compensation', 16, 10);
      GO
      
    2. トリガーを変更します。

      USE AdventureWorks2022;
      GO
      ALTER TRIGGER Sales.bonus_reminder
      ON Sales.SalesPersonQuotaHistory
      AFTER INSERT
      AS RAISERROR ('Notify Compensation', 16, 10);
      GO
      

DROP TRIGGER と ALTER TRIGGER を使用してトリガーの名前を変更する

  1. データベース エンジンに接続します。

  2. 標準バーから、 [新しいクエリ] を選択します。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。 この例では、DROP TRIGGER ステートメントと CREATE TRIGGER ステートメントを使用して、Sales.bonus_reminder トリガーの名前を Sales.bonus_reminder_2 に変更します。

USE AdventureWorks2022;
GO

IF OBJECT_ID(N'Sales.bonus_reminder', N'TR') IS NOT NULL
    DROP TRIGGER Sales.bonus_reminder;
GO

CREATE TRIGGER Sales.bonus_reminder_2
    ON Sales.SalesPersonQuotaHistory WITH ENCRYPTION
    AFTER INSERT, UPDATE
AS RAISERROR ('Notify Compensation', 16, 10);
GO