【发布时间】:2012-02-23 10:52:08
【问题描述】:
在创建 SQL 脚本以在表上创建触发器时,我想在创建触发器之前检查该触发器是否不存在。否则脚本无法多次运行。
所以我添加了一条语句,首先检查触发器是否存在。添加该语句后,CREATE TRIGGER 语句不再起作用。
IF NOT EXISTS (SELECT name FROM sysobjects
WHERE name = 'tr_MyTable1_INSERT' AND type = 'TR')
BEGIN
CREATE TRIGGER tr_MyTable1_INSERT
ON MyTable1
AFTER INSERT
AS
BEGIN
...
END
END
GO
这给出了:
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'TRIGGER'.
解决方案是删除现有触发器,然后创建新触发器:
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'tr_MyTable1_INSERT' AND type = 'TR')
DROP TRIGGER tr_MyTable1_INSERT
GO
CREATE TRIGGER tr_MyTable1_INSERT
ON MyTable1
AFTER INSERT
AS
BEGIN
...
END
GO
我的问题是:为什么第一个示例失败了?检查触发器存在有什么问题?
【问题讨论】:
标签: sql sql-server triggers