我需要通过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的迁移有没有办法解决这个问题?
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
有更好的想法吗?