0

SELECT我在存储过程中有一个 T-SQL 查询,它使用来自另一个表的命令将数据插入到一个表中。问题是如果在将它插入另一个表时在选择表子句中发现重复条目​​,它会停止查询执行(我对此施加了主要的键约束)

我希望 SQL 跳过发生的错误(即不要抛出它并停止..继续执行)并继续插入下一行..

我知道有办法TRANSACTION COMMIT ROLLBACK TRY CATCH但如何使用它们?

我的 T-SQL:

Begin

    Set @SQL='Insert Into AxisReports
                Select *
                From ReportData L 
                Left Join ATM A On L.ATMID=A.ATM 
                Where L.ATMID=A.ATM AND L.IssuerNetwork < > ''0000'' '
    Exec(@SQL)

End

源表可能包含超过 5 个 Lac 条目,编号非常小。的重复行。

4

2 回答 2

1

我建议您重新设计代码,而不是干扰表的键,以便一开始就不允许重复的行进入您的目标表。
您可以将您的 INSERT SQL 更改为如下内容:

INSERT INTO AxisReports
SELECT x.ATMID FROM
    (SELECT * 
       FROM ReportData L 
  LEFT JOIN ATM A ON L.ATMID=A.ATM 
      WHERE L.ATMID=A.ATM) x
LEFT OUTER JOIN AxisReports y ON x.ATMID =  y.RepID
WHERE y.RepId IS NULL  

希望能帮助到你。

于 2012-09-15T13:36:16.307 回答
0

尝试在查询中使用 Distinct 子句:

Begin

    Set @SQL='Insert Into AxisReports
                Select distinct *
                From ReportData L 
                Left Join ATM A On L.ATMID=A.ATM 
                Where L.ATMID=A.ATM AND L.IssuerNetwork < > ''0000'' '
    Exec(@SQL)

End

请注意,仅当查询返回的所有列的值对于重复行都相同时,这才有效。

于 2012-09-15T13:05:33.987 回答