3

How do I use SSIS to iterate the image files in a directory and using the filename run a query to insert the image into sql server?

I realise that with a Foreach File Enumerator I can loop the files and get the filename into a variable. How do I use this variable to run a query to find the record for that filename from hd in my table and then import the image into my sql server image type column?

Once I have the file in my database, I will delete the file from hd.

4

1 に答える 1

1

問題を正しく理解している場合は、SSISを使用して、ある場所にあるすべてのファイルをSQL Serverにスイープしますか?

データフロータスク

データフロータスクは、データベースへのファイルの実際のインポートを担当します。あなたのアプローチは、 SSISを介してSQLにXMLファイルを挿入する際のvarbinaryデータのインポートプリティピクチャーバージョンで概説されているものと同じです。

ソースは、ソースコンポーネントとして動作するスクリプト変換コンポーネントになります。すべてのファイル名をデータフローに追加するのが仕事です。2番目のリンクのフィルターを*.png(またはフィルターが何であれ)に変更すると、機能するはずです。

生成されたファイル名で[列のインポート]コンポーネントを使用します。これにより、ファイルポインタがデータフローに追加され、データベースにインポートできるようになります。データ型がDT_IMAGEであることを確認する必要があります。varbinary(max)/ varchar(max)/ nvarchar(max)を使用している場合でも、パイプラインのメタデータのコンテキスト内ではすべてDT_IMAGEになります。

そのすべてのデータをターゲットテーブルにルーティングすると、ファイルデータがインポートされます。

ファイルのクリーンアップ

この時点で、このすべてのデータをインポートしたので、ディスクからファイルを削除します。ファイル名を画像ビットとともにデータベースに保存したとすると、SQL実行タスクを使用してファイル名のリストを取得します。出力タイプをNoneからFullResultSetに変更し、それをObjectタイプの変数に格納します。

Foreach列挙子をSQLタスクの出力に接続すると、ここで結果を「細断処理」する必要があります。その用語をグーグルで検索すると、これを行う方法に関するさまざまなブログ投稿や以前のSOの質問が見つかります。最終的には、ファイル名がレコードセットオブジェクトから取得され、ローカル変数に割り当てられます。

Foreach列挙子内で、ファイルシステムタスクを使用して、Foreach列挙子から変数セットで参照されているファイルを削除します。

于 2012-11-13T21:13:48.233 に答える