我正在我的数据库上实现审计系统。它在每个表上使用触发器来记录更改。 我需要对这些触发器进行修改,因此正在为每个触发器生成 ALTER 脚本。 我想做的是只更改这些触发器(如果它们存在),理想情况下是这样的:
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'TR' AND name = 'MyTable_Audit_Update')
BEGIN
ALTER TRIGGER [dbo].[MyTable_Audit_Update] ON [dbo].[MyTable]
AFTER Update
...
END
但是,当我这样做时,我收到一条错误消息“关键字 TRIGGER 附近的语法无效”
这些触发器可能不存在的原因是可以在最终用户可以指定的表上启用/禁用审计。这涉及创建或删除触发器。我无法在创建触发器时对其进行更改,因为它们是动态创建的,因此我仍然必须提供一种方法来更改触发器(如果它们存在的话)。
最佳答案
alter 语句必须是批处理中的第一个。所以对于 sql server 它将是:
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'TR' AND name = 'MyTable_Audit_Update')
BEGIN
EXEC('ALTER TRIGGER [dbo].[MyTable_Audit_Update] ON [dbo].[MyTable]
AFTER Update
...')
END
关于sql - 仅在存在时更改 TRIGGER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25156428/