2017-05-15 165 views
1

我有一个#table中的数据包含特定行,我需要将所有这些行插入到原始数据库表中。我写的查询,如下在插入并在SQL Server中继续插入时忽略SQL错误例外

insert into tbl_user select * from #tblExcelData 

#tblExcelData包含要在tbl_user插入多行。

但是,由于一行外键异常引起的插入被触发,并且插入之后停止。

我想继续插入其他行。没有插入错误的行是没有被插入,但其他行应该继续。

在SQL Server中有没有办法做到这一点?

+0

您可以直接修改您的查询了一下,以排除那些已经在tbl_user。 –

+0

TSQL语句是原子的。声明成功并且所有相应的行都受到影响 - 或者没有任何影响。如果你想要这个级别的控制,你可以使用游标。 SSIS是另一种选择,它允许你从excel文件中将行加载到你的表中,并单独处理错误。请记住,您可能有许多不同类型的错误 - 假设外键问题是唯一可能的错误并不安全。 – SMor

回答

3

据我所知,你不能;一个DML语句被完全执行或根本不执行,并且在发生错误的情况下它根本就不是。

你可以(也应该)做的是只选择你的数据你可以插入。

喜欢的东西:

insert into tbl_user 
select * 
from #tblExcelData x 
inner join tbl_with_FK y 
     on y.PK = x.FK