如果存在使用流畅的迁移器,则更改触发器

时间:2017-09-07 12:53:44

标签: sql sql-server triggers database-trigger fluent-migrator

我有一个名为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。

有没有办法实现这个目标?

提前致谢。

2 个答案:

答案 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