Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 即使生成异常,也要继续insert语句_Sql Server - Fatal编程技术网

Sql server 即使生成异常,也要继续insert语句

Sql server 即使生成异常,也要继续insert语句,sql-server,Sql Server,我试图执行下面的查询,在此期间生成了一个约束冲突异常,并且由于insert语句终止 我想假设从10条记录中有9条记录是干净的,那么9的插入将完成。此时语句终止,不执行插入 我正在使用SQL Server 2012,我不想回滚事务,SQL Server中没有插入忽略命令,我不想插入包含错误的数据。我只想插入干净的数据 查询: INSERT INTO rcmschargepostingmastertable (clinicid, clinicsi

我试图执行下面的查询,在此期间生成了一个约束冲突异常,并且由于insert语句终止

我想假设从10条记录中有9条记录是干净的,那么9的插入将完成。此时语句终止,不执行插入

我正在使用SQL Server 2012,我不想回滚事务,SQL Server中没有插入忽略命令,我不想插入包含错误的数据。我只想插入干净的数据

查询:

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

FROM   #tempautopostbulkchargepostingmastertable 
我不想插入包含错误的数据。我只想插入干净的数据

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

  ........
  modifiedbyid 
FROM   #tempautopostbulkchargepostingmastertable 
Where some_column <> 'bad data'
。。。。。。。。
修改过的字节
从#tempautopostbulkchargepostingmastertable
其中某些列为“坏数据”

由于您使用的是SQL Server 2012,您可以使用它来识别和过滤坏数据

,因此无法执行您在评论中所述的操作:

我希望忽略任何sql错误,并希望继续插入 干净记录

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

有一个解决方法没有提到,因为它是性能最差的方法,但至少您没有放弃,那就是用一个每次插入一行的光标替换基于集合的插入


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

所有错误都未知。可能是运行时错误,如违反约束,数据截断或任何其他SQL错误。我想忽略该数据并想继续执行。违反约束的记录可以在
中筛选出来,其中
子句违反约束只是一个错误。可能有太多其他错误,我无法使用Where子句筛选10列。我相信这个问题会获得最难阅读的代码示例对理解和解决问题的贡献最小。恭喜!现在告诉我们您的约束错误是什么,这样我们就可以回答这个问题。SSIS可以做到这一点(因为它是基于管道的),但不能做到T-SQL(因为它完全是事务性的)。不是直接的…代码很简单,但我认为它的格式不正确。我不想使用SSIS。不,代码基本上是无关的。列出所有这些列告诉我们没有什么重要的。告诉我们这个错误会告诉我们一些重要的事情。我已经告诉过你,我想忽略任何sql错误,继续插入干净的记录。这是迄今为止唯一“解决”这个问题的答案。当想到使用游标时,每个DBA都会暗自啜泣——但我想这是一种“解决问题”的方法。我将不插入导致错误的记录,而是插入它们各自的记录。我不想使用游标或任何其他循环。如果找不到任何其他解决方案,我将使用where子句来处理已知错误。where子句是最好的解决方案。正如我所说的,不可能让SQL忽略会导致错误的记录,而只插入不会导致错误的记录。