如果存在则创建或更改触发器

时间:2015-08-11 11:45:59

标签: sql sql-server tsql triggers

我试图确定是否应该创建或更改并触发。我的代码如下。

CoordinatorLayout

我得到的错误是:

  • 其他
  • 附近的语法不正确
  • 创建触发器应该是唯一的 批量声明。

这段代码应该如何?

3 个答案:

答案 0 :(得分:8)

如果您不想将创建触发器语句作为动态SQL,那么您可以执行以下操作:

IF OBJECT_ID(N'Sales.bonus_reminder', N'TR') IS NOT NULL
    exec sp_executesql N'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);

答案 1 :(得分:2)

使用this articular作为我的真理来源。这是简短的答案。

SQL Server 2016 sp1开始,您可以使用create or alter语句来代替其他drop和create方法(到目前为止,我个人最爱)在某些数据库对象(stored procedures / {{1} } / functions / triggers)。

所以您的脚本看起来像

views

答案 2 :(得分:1)

使用动态SQL

IF OBJECT_ID(N'Sales.bonus_reminder', N'TR') IS NOT NULL
    EXEC('
    ALTER TRIGGER Sales.bonus_reminder
    ON Sales.SalesPersonQuotaHistory
    AFTER INSERT
    AS RAISERROR (''Notify Compensation'', 16, 10)'
    );
else
    EXEC('
    CREATE TRIGGER Sales.bonus_reminder
    ON Sales.SalesPersonQuotaHistory
    WITH ENCRYPTION
    AFTER INSERT, UPDATE 
    AS RAISERROR (''Notify Compensation'', 16, 10)'
    );