我有一个名为dbo.SendMail的触发器和多个数据库, 并非所有数据库都有触发器dbo.SendMail。
我正在使用FluentMigrator来管理数据库版本,我想做类似下面的事情
IF EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[SendMail]'))
BEGIN
ALTER TRIGGER [dbo].[SendMail]
ON [dbo].[Notification]
FOR INSERT
AS
BEGIN
some sql code
END
END
它给我错误语法接近开始,期待EXTERNAL。
有没有办法实现这个目标?
提前致谢。
答案 0 :(得分:0)
试试这个:
IF OBJECT_ID(N'[dbo].[SendMail]', N'TR') IS NOT NULL
-- Do whatever
Else
-- Do something else
答案 1 :(得分:0)
这是你的一些动态sql的触发器代码。您必须在此处使用动态sql滚动,因为创建或更改对象必须是批处理中的唯一语句。您不能将创建/更改逻辑包装在IF语句中。
IF OBJECT_ID('SendMail') is not null
begin
declare @SQL nvarchar(max)
set @SQL = 'ALTER TRIGGER [dbo].[SendMail]
ON [dbo].[Notification]
FOR INSERT
AS
BEGIN
some sql code
END'
exec sp_executesql @SQL
end