如何有条件地失败SQL Server的Flyway迁移脚本

时间:2017-12-05 13:08:16

标签: sql-server flyway

我需要通过Flyway执行更新SQL。即使数据库表中不存在ITEM_ID,AFAIK,update语句也会成功执行。如果找不到任何ITEM_ID,我希望此迁移失败。

我尝试了什么:

IF (SELECT COUNT(*) TABLE1 WHERE ITEM_ID IN (3, 5, 7)) != 3 
BEGIN
    RAISERROR('Unexpected IDs. Aborting.', 20, -1) with log
END
GO

update TABLE1 set FIELD1='AA' where ITEM_ID=3;
update TABLE1 set FIELD1='BB' where ITEM_ID=5;
update TABLE1 set FIELD1='CC' where ITEM_ID=7;
GO
如果数据库用户不是管理员(我的情况),

raiserror似乎无法工作。

基于SQL Server的迁移有没有办法解决这个问题?

更新1:

raiserror适用于严重级别为11。

IF (SELECT COUNT(*) TABLE1 WHERE ITEM_ID IN (3, 5, 7)) != 3 
BEGIN
    RAISERROR('Unexpected IDs. Aborting.', 11, -1)
END
GO
update TABLE1 set FIELD1='AA' where ITEM_ID=3;
update TABLE1 set FIELD1='BB' where ITEM_ID=5;
update TABLE1 set FIELD1='CC' where ITEM_ID=7;
GO

有更好的想法吗?

0 个答案:

没有答案