私は、フラット csv ファイル (A) から SQL Server データベース (B) へのデータのロードを実装する任務を負っています。現在、私は SSIS の完全な初心者ですが、転送を行うのはかなり簡単です。問題は、CSV からのデータ (A) を (B) 内の 4 つの異なるテーブルにロードする必要があり、挿入する前に既存のデータを確認する必要があるということです。
たとえば、(A) CSV には、[SERVER].[VERSION] という構造で構成される SERVER_VERSION という名前の列があります。
私がする必要があること:1.サーバーとバージョンを(A)列から個別の情報(単純なトリム)として取得します2.この情報を検索する(B)バージョンテーブルで選択クエリを実行します3.ある場合結果がありません。(A) からの情報を (B) サーバー テーブルに挿入します。このテーブルには、サーバー列とバージョン列があります。
FLATFILE_SOURCE -> EXTRACT_SERVER_VERSION -> CHECK_VERSION -> INSERT_VERSION ->SQL_DESTINATION
もちろん、CSVのすべての行に対してこれを行いたいです。
さて、私の最初のアイデアは、フラット ファイルからサーバーとバージョンを抽出するスクリプト コンポーネントを通過するフラット ファイル ソースを使用して、この検証にデータ フローを使用することでした。しかし、これは非常にオブジェクト指向の方法であり、SSIS での使用には適していないように思われます。
Q1 : スクリプトから取得したデータは、(B) の SELECT クエリ内で使用する必要があります。これを実装するための最良のルートは何ですか? スクリプトの結果をデータ フロー外の EXECUTE SQL QUERY に出力できますか、それともスクリプト内で直接 SQL クエリを試したほうがよいでしょうか? これは変換ではなくデータ分析であるため、正しい方法ではないことは確かです。
Q2 : server と version のペアの値などの一時的な情報を保存するために使用できるキャッシュ/バッファーはありますか? データフロー外でグローバルにアクセスできますか?
Q3 : では?データベースで見つからなかった行を挿入する必要があります。繰り返しますが、SELECT クエリの結果を EXECUTE SQL タスクに出力したほうがよいでしょうか? 結果をループして正しい情報を挿入するにはどうすればよいですか。
現在、ソースと宛先の作成に問題はありませんが、これまでのところスクリプト タスクではうまくいきませんでした。さらに重要なのは、必要な SQL クエリを実行し、それらの内部の情報を分析して行動するための最良の方法は何かということです。
これが非常に曖昧で、実際よりもはるかに複雑に聞こえることはわかっていますが、この種の操作に関する情報を見つけることができないようです. この種の操作をカバーしていない典型的なチュートリアル、または必要以上の技術的な質問が表示されます。私の部署にも SSIS を実際に使用した経験のある人はいないので、いくつかのヒントを実際に活用できます。特定のコードを求めているわけではありません。これを整理する方法についてのいくつかのヒントが本当に役に立ちます!
ありがとう
PS: はい、.net プログラムで簡単にできることはわかっています。