我正在使用一个spring引导程序将一些数据加载到MS SQL server中的子表中。我从一个服务中获取数据,并为每个项目循环插入语句。有一些损坏的数据违反了外键约束。我想跳过违反FK约束的数据并继续插入剩余数据。
我正在使用下面的插入查询来执行相同的
begin try INSERT INTO [dbo].[TABLENAME](.....column names......)VALUES(.....) end try begin catch end catch
;
try-catch正在处理抛出的FK约束异常,并允许程序继续执行循环中的其他记录而不会出现任何问题,但它也不会因任何其他约束冲突而抛出错误。是否有一种方法可以在try-catch中特别提到错误类型,从而只处理FK约束。
我能够在其他程序中使用exception when dup_val_on_index then
在Oracle中执行类似的约束特定捕获。非常感谢您的帮助!
您可以在begin catch end catch
块中使用@@ERROR
、ERROR_NUMBER()
或ERROR_MESSAGE()
。
示例:-
Begin try
INSERT INTO [dbo].[TABLENAME](.....column names......)VALUES(.....)
End try
Begin catch
IF ERROR_NUMBER() != 547
-- IF @@ERROR != 547
-- IF ERROR_MESSAGE() Not like '%The INSERT statement conflicted with the FOREIGN KEY constraint%'
Throw
End catch