修改或重命名 DML 触发器

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

本文介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中修改或重命名 DML 触发器。

限制

重命名触发器时,该触发器必须位于当前数据库中,并且新名称必须遵守 标识符规则。

建议

避免使用 sp_rename 存储过程来重命名触发器。 更改对象名的任一部分都可能破坏脚本和存储过程。 重命名触发器将不会更改 sys.sql_modules 目录视图的定义列中相应对象名的名称。 我们建议删除并重新创建触发器。

如果更改了 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. 复制并将以下示例粘贴到查询中。 执行第一个示例以创建 DML 触发器,在用户尝试添加或更改 SalesPersonQuotaHistory 表中的数据时,该触发器将用户定义的信息打印到客户端。 执行 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 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