SQL Server 2012のインポートウィザードを使用して、データベースAからデータベースBにデータをインポートしています。
うまく機能するソースクエリを作成しましたが、2つのオプションしかありません
だから私はソースクエリを以下のようなものに変更してみたかった
select col1, col2, col3 from A where col1 not in (select col1 from
DatabaseB.dbo.B)
言い換えると、データベースAのテーブルAからプルしているデータが、データベースBのテーブルBにまだ存在していないことをテストしたいと思います。ここで、col1は一意の値です。
私はこれを何度も何度も行うことができるようにしたいのですが、デルタデータを横切るだけです
私がこれをしようとするたびに、私は述べるエラーが出ます
据え置き準備を完了できませんでした。
ステートメントを準備できませんでした。
キーワード「in」付近の構文が正しくありません。 (Microsoft SQL Server Native Client 11.0)
注目に値するいくつかの追加事項(いくつかの手掛かりを与える可能性があります)
インポート/エクスポートウィザードは、舞台裏でSSISパッケージを構築してEL(抽出と読み込み)を実行します。合理化されたツールであるため、実際には変換機能はありません。
あなたがしようとしていることは、存在に基づいて条件付きでデータをロードすることです。それは結構です、それは一般的なパターンです。
機能していないクエリで解決しようとしています。
select col1, col2, col3 from A where col1 not in (select col1 from
DatabaseB.dbo.B)
これは、DatabaseBがA
と同じインスタンス上にあると想定しています。 AとBの間にリンクサーバーを確立した場合、クエリは機能します-許容レベルで実行するかどうかは別問題です。
select col1, col2, col3 from A where col1 not in (select col1 from
Server2.DatabaseB.dbo.B)
これを行うSSISのネイティブな方法は、ソースと宛先の間にcol1
に基づいて一致するルックアップを追加することですが、インポートエクスポートウィザードでは実行できません。 Visual Studio/SQL Serverデータツール(SSDT)を使用してパッケージを編集する必要があります。
reasonsのパッケージを編集できない場合は、2つのパッケージをビルドする必要があります。 1つ目は、すべてのCol1 IDを宛先からソースにエクスポートして戻します。次に、サーバーをクロスする代わりに、ソースクエリを変更して、IDのローカルキャッシュを参照できます。
万能の読み方-> 階段への統合サービス ステップ3は、あなたが探している増分負荷であると思います