【问题标题】:How to create trigger inside an IF condition?如何在 IF 条件内创建触发器?
【发布时间】:2012-09-18 10:55:41
【问题描述】:

我正在尝试在表上创建触发器。我的要求是只有在表存在时才创建触发器。

例如

if(table exists)
        begin
             create trigger on the table 
        end 

谷歌搜索后,我发现create trigger 应该是批处理中的第一个命令。 这意味着我不能在当前批次中使用if 或任何其他东西。

请帮帮我!

【问题讨论】:

    标签: sql-server sql-server-2008 triggers


    【解决方案1】:

    你可以使用

    IF(OBJECT_ID('YourTable','U') IS NOT NULL)
        EXEC('CREATE TRIGGER ....')
    

    您需要通过将触发器正文中的任何单引号加倍来转义它们。

    【讨论】:

      【解决方案2】:

      只需使用它自己的创建触发器语句。

      如果没有表,它不会对数据库做任何事情,只是给出一个错误信息。不会有什么不好的事情发生。

      【讨论】:

      • CREATE TRIGGER Foo ON DoesNotExist AFTER INSERT AS SELECT 1 返回错误The object 'DoesNotExist' does not exist or is invalid for this operation.
      • @MartinSmith,是的,当然可以。但没有任何不好的事情发生。你想要的不是触发器。你得到的不是触发器。如果有表,你要的是触发器,得到的是触发器。问题解决了。
      • 除了您的部署脚本之外,还有大量虚假错误,您需要检查它们是否符合预期。
      • @MartinSmith:感谢您的回答。
      • @Ben:如果与其他脚本结合使用,它将中断执行。
      猜你喜欢
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 2023-03-26
      • 2015-03-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2022-07-29
      相关资源
      最近更新 更多