共用方式為


修改或重新命名 DML 觸發程序

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體

這篇文章說明如何使用 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. 複製下列範例並貼入查詢中。 執行第一個範例,建立當使用者嘗試在 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和 CREATE TRIGGER 重新命名觸發程式

  1. 連線至資料庫引擎。

  2. 在標準列上,選取 [新增查詢]

  3. 複製下列範例並將其貼到查詢視窗中,然後選取 [執行]。 此範例使用 DROP TRIGGERCREATE 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