0

週に 1 回、指定した時刻に SSIS パッケージを自動的に実行したいと考えています。毎週新しい Excel ファイルの内容をロードする前に、データベース全体をクリアしたいと考えています。データベース全体をクリアするために truncate ステートメントを使用できると思います。しかし、事前に名前のわからないファイルから読み取るにはどうすればよいでしょうか。

私の本能は、次のことを知る必要があると教えてくれます。

How do I prompt the user for a file name in SSIS? 
Am I using VB or C# to do this prompting?

ありがとう!

4

1 に答える 1

1

どれくらいの答えが欲しいですか?;)

事前に名前がわからないファイルから読み取るにはどうすればよいですか?

この点に関して、多くの選択肢があります。私が取る順番にそれらをリストしています

  1. 私の「移動先」はForeach Enumeratorで、ファイルの種類を使用して、標準フォルダー内の利用可能なファイルを処理します。これにより、問題がトレーニングの問題に変わります (ユーザー、ファイルを \server\share\inbound にドロップしてください)。

  2. ファイルの接続マネージャーの ConnectionString プロパティに Expression があると仮定すると、この値のランタイム オーバーライドを指定できます。したがって、SSIS 変数の名前InputFileと値は、\\server\share\inbound\source_2012-07-17.txtSource という名前の接続マネージャーであり、@[User::InputFile] にマップされた ConnectionString プロパティの式があります。パッケージを実行すると、InputFile の値が正しい限り、パッケージは次のようになります。正しいソース ファイルを使用すれば問題ありません。これを行うために変数を作成して式を使用する必要はありませ接続マネージャーのプロパティに対して直接実行しますが、メンテナンスとトラブルシューティングの観点からは、問題に対処するのに適しています。パッケージを実行するときは、コマンド ライン オプションを使用して、構成するものに明示的な値を指定する必要があります。おおよそdtexec /file C:\mypackage.dtsx /set \Package.Variables[User::InputFile].Properties[Value];"\\server\share\inbound\source_2012-07-18.txt" dtexecui を使用して、この文字列を適切に構築します。

  3. ユーザーが実際にパッケージを実行している場合 (ダブルクリック、実行)、対話モードで実行され@[System::InteractiveMode] = Trueています。パッケージの最初のステップとして、スクリプト タスクで本格的な Windows フォーム アプリを作成することを妨げるものは何もありません。とは言っても、 UI コードで ETL パッケージを肥大化するつもりはありませんが、それは可能です。それは本当にあなたが達成しようとしていることに依存します。

  4. その UI コードを専用パッケージに移動します。ユーザー入力を組み立てた後、親/子構成を介して子パッケージに渡します。

  5. これは実際には 2 + 3 です。良いことをして、コマンドラインのオーバーライドに基づいてパッケージを実行してください。このようにして、サーバー (SQL エージェント) での実行だけでなく、対話モードでも機能します。次に、任意のテクノロジを使用して、ユーザー入力を取得および検証するためのインターフェイスを作成し、それらの値でパッケージを呼び出します。DTEXEC の呼び出しをスキップして、オブジェクト モデルを直接操作することができます。

  6. これは実際には 1100 億のオプションである必要があります。入力ファイル\\server\share\input\source_file.txt鉄拳で Ruleという名前になり、ユーザーがあなたの意志に従うようにします。権限がある場合は、ユーザーが使用するように指示したファイル名である限り、ユーザーが任意のファイル名を使用できるようにします。そうしないと、データがロードされません。

于 2012-07-18T17:46:29.847 に答える