0

SELECT別のテーブルからのコマンドを使用してテーブルにデータを挿入するストアド プロシージャに T-SQL クエリがあります。問題は、別のテーブルに挿入しているときにselect table句で重複するエントリが見つかった場合、クエリの実行を停止することです(これに主キー制約を課しました)

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 に答える