即使生成异常,也要继续插入语句

时间:2016-01-15 15:46:10

标签: sql-server

我正在尝试执行下面的查询,并且在此期间生成一个约束违例异常并且由于该insert语句被终止。

我想从10条记录中假设9条记录是干净的,然后插入将完成9.right现在语句终止并且不执行插入。

我正在使用SQL Server 2012,我不想回滚事务,并且在SQL服务器中没有插入忽略命令,我不想插入包含error.i的数据,只想插入干净的数据。

查询:

INSERT INTO rcmschargepostingmastertable 
            (clinicid, 
             clinicsiteid, 
             appointmentid, 
             patientid
             ) 
SELECT clinicid, 
       clinicsiteid, 
       appointmentid, 
       patientid, 

FROM   #tempautopostbulkchargepostingmastertable 

2 个答案:

答案 0 :(得分:2)

您无法按照评论中的说明进行操作:

  

我想忽略任何sql错误,并希望继续插入   清理记录

SQL Server没有任何纯SQL机制来执行此操作。您唯一的选择是使用建议的解决方法之一(SSIS,WHERE子句)。

没有提及一个解决方案,因为它是性能最差的,但至少它是你没有被击落的,是取代你的带有光标的基于集合的插入,一次插入一行。

然后你可以将单行插入放在一个TRY块中,如果它出错,光标将跳过它并继续下一个插入。

答案 1 :(得分:1)

我不想插入包含error.i的数据,只想插入干净的数据。

然后,您需要在插入目标表之前识别并过滤掉违反记录的错误数据/约束,这将使您的生活更轻松。

  ........
  modifiedbyid 
FROM   #tempautopostbulkchargepostingmastertable 
Where some_column <> 'bad data'

由于您使用的是SQL Server 2012,因此您可以使用TRY_CONVERT来识别和过滤掉错误的数据