如何跳过违反外键约束的数据并将剩余数据插入SQL Server?如何处理SQL Server中的特定错误



我正在使用一个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块中使用@@ERRORERROR_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

最新更新