【问题标题】:How do i recreate a trigger in SQL Server?如何在 SQL Server 中重新创建触发器?
【发布时间】:2010-05-19 14:04:43
【问题描述】:

我在sqlite 中使用drop trigger if exist TRIGGER 语句,但sql server 不喜欢if 语句。 (我想存在是冒犯的词)。我在我的创建触发器语句旁边执行此操作,因为我想删除具有相同名称的旧触发器,以便我可以用这个新触发器替换它。

我如何在 SQL Server 中执行此操作?

【问题讨论】:

    标签: sql-server triggers


    【解决方案1】:

    在 SQL Server Management Studio 中(我认为是在 Query Analyzer 中)在资源管理器中右键单击触发器,然后选择 Script-as 选项,在剪贴板中选择“Drop Trigger”,SSMS 将创建 T-SQL删除该触发器的语法。

    对不起,我没有给你T-SQL,你可以复制和粘贴,但是这样你下次就知道该怎么做了。

    【讨论】:

    • 这就是我学习许多脚本策略的方式。意识到企业管理器(和 SSMS)生成的代码真的很糟糕,这是我学到的大部分内容。
    • 不幸的是,还有待解决的问题阻止我在我的机器上运行它。
    【解决方案2】:

    您可以像这样检查特定触发器的存在。

    IF EXISTS
    (
    select name
    from sys.objects
    where type='TR' and name ='Trigger Name'
    )
    BEGIN
    
    --Add your Trigger create code here
    
    END
    

    【讨论】:

      【解决方案3】:

      我发现这是一个更紧凑的 SQL Server,相当于 MySQL 的 DROP TRIGGER IF EXISTS 语法:

      IF OBJECT_ID('XXXX', 'TR') IS NOT NULL
          DROP TRIGGER XXXX
      

      【讨论】:

        【解决方案4】:

        我会使用类似的东西:

        IF objectproperty(object_id('dbo.xxx'), 'isTrigger') = 1
            DROP PROCEDURE dbo.xxx
        GO
        CREATE TRIGGER dbo.xxx [etc]
        

        将 xxx 替换为您的触发器名称(如有必要,将 dbo 替换为相关架构)。

        或者,您可以使用

        ALTER TRIGGER dbo.xxx [etc]
        

        【讨论】:

          【解决方案5】:

          自 2016 版以来,此语法也是 supported by Microsoft SQL Server:

          DROP TRIGGER IF EXISTS trigger_name

          【讨论】:

            猜你喜欢
            • 2011-03-22
            • 1970-01-01
            • 2014-02-02
            • 1970-01-01
            • 2011-04-05
            • 1970-01-01
            • 1970-01-01
            • 2010-12-30
            • 1970-01-01
            相关资源
            最近更新 更多