dem*_*key 7 sql sql-server triggers
在创建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
Run Code Online (Sandbox Code Playgroud)
这给出了:
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'TRIGGER'.
Run Code Online (Sandbox Code Playgroud)
解决方案是删除现有触发器,然后创建新触发器:
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
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么第一个例子失败了?检查触发器有什么问题?
Stu*_*Stu 11
某些语句必须是批处理中的第一个语句(例如,由GO分隔的语句组).
引用:
CREATE DEFAULT,CREATE FUNCTION,CREATE PROCEDURE,CREATE RULE,CREATE SCHEMA,CREATE TRIGGER和CREATE VIEW语句不能与批处理中的其他语句组合使用.CREATE语句必须启动批处理.该批次中的所有其他语句将被解释为第一个CREATE语句定义的一部分.