1

わかりましたので、Microsoft docsによると、SSIS の OLE DB Command Transformation はこれを行います

OLE DB コマンド変換は、データ フローの各行に対して SQL ステートメントを実行します。たとえば、データベース テーブルの行を挿入、更新、または削除する SQL ステートメントを実行できます。

したがって、レコードが存在しない場合にのみ、テーブルの1つに行を挿入するSQLを書きたい

だから私はこれを試しましたが、コントロールは悪いsintaxyについて不平を言い続けます

IF NOT EXISTS
(SELECT * FROM M_Employee_Login WHERE 
           Column1=?
           AND Column2=?
           AND Column3=?)

INSERT INTO [M_Employee_Login]
           ([Column1]
           ,[Column2]
           ,[Column3])
     VALUES
           (?,?,?)

ただし、IF NOT EXISTS セクションを削除すると (挿入のみを残す)、コードが問題ない可能性があるとコントロールに表示されます。

もっと簡単な解決策はありますか?

更新:ところで私のソースはフラットファイル(csvファイル)です

回答後の更新:人々に知らせるためだけに。私は、この操作OLE DB Command Transformationよりも、計画された原因の方が優れているようなものを使用することになりOLE DB Destinationました。違いは、Lookup Component既存のすべてのレコードをフィルタリングするために を使用したことです(回答が示唆したように)。次に、質問にあった を使用するOLE DB Command Transformationと、期待どおりに機能しました。Insert SQLそれが役に立てば幸い

4

2 に答える 2

2

SSIS の Look up コンポーネントを使用して重複を回避することができますが、これは可能な限り最善の方法ですが、重複を回避するためのクエリを探している場合は、一時/ステージング テーブルにすべてのデータを挿入するだけです。データベースに移動し、次のクエリを実行します。

INSERT INTO M_Employee_Login(Column1, Column2, Column3)
SELECT vAL1,vAL2,vAL3 from Staging_Table
EXCEPT
SELECT Column1, Column2, Column3 FROM M_Employee_Login
于 2013-08-05T20:10:02.737 に答える