【发布时间】:2010-05-19 14:04:43
【问题描述】:
我在sqlite 中使用drop trigger if exist TRIGGER 语句,但sql server 不喜欢if 语句。 (我想存在是冒犯的词)。我在我的创建触发器语句旁边执行此操作,因为我想删除具有相同名称的旧触发器,以便我可以用这个新触发器替换它。
我如何在 SQL Server 中执行此操作?
【问题讨论】:
标签: sql-server triggers
我在sqlite 中使用drop trigger if exist TRIGGER 语句,但sql server 不喜欢if 语句。 (我想存在是冒犯的词)。我在我的创建触发器语句旁边执行此操作,因为我想删除具有相同名称的旧触发器,以便我可以用这个新触发器替换它。
我如何在 SQL Server 中执行此操作?
【问题讨论】:
标签: sql-server triggers
在 SQL Server Management Studio 中(我认为是在 Query Analyzer 中)在资源管理器中右键单击触发器,然后选择 Script-as 选项,在剪贴板中选择“Drop Trigger”,SSMS 将创建 T-SQL删除该触发器的语法。
对不起,我没有给你T-SQL,你可以复制和粘贴,但是这样你下次就知道该怎么做了。
【讨论】:
您可以像这样检查特定触发器的存在。
IF EXISTS
(
select name
from sys.objects
where type='TR' and name ='Trigger Name'
)
BEGIN
--Add your Trigger create code here
END
【讨论】:
我发现这是一个更紧凑的 SQL Server,相当于 MySQL 的 DROP TRIGGER IF EXISTS 语法:
IF OBJECT_ID('XXXX', 'TR') IS NOT NULL
DROP TRIGGER XXXX
【讨论】:
我会使用类似的东西:
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]
【讨论】:
自 2016 版以来,此语法也是 supported by Microsoft SQL Server:
DROP TRIGGER IF EXISTS trigger_name
【讨论】: