sql >> データベース >  >> RDS >> Sqlserver

SSISで変数を変更するには?

    @Yuck と @devarc が指摘しているように、変数 保持します。設計時の値は、変数が最初に作成されたときに割り当てる値です。あなたの場合、変数は C:\Test.txt を設計時の値として保持します。パッケージを開くたびに、

    で変更するまで C:\Test.txt が表示されます。

    パッケージの実行中に変数の値を変更するには、値を設定するか計算するかを選択できます。ここでは、パッケージ レベルの変数 CurrentFile を作成しました。 C:\Test.txt の値で

    実行時の値を正しく変更したのに、BIDS で実行すると「古い」値が表示されるということは、よく人をつまずかせることがあります。 [変数] ウィンドウに表示される値は、パッケージの実行中に変化しません。

    パッケージの実行中、変数ウィンドウには設計時の値 (C:\Test.txt) が表示されますが、実際の値は [ローカル] ウィンドウ (C:\Test2.txt) に反映されます。

    値の設定

    SSIS のほとんどすべての値は、一連の詳細な コマンドライン オプション または 設定 を介して ソース。私の考えでは、このアプローチの最大の違いは、値が常にパッケージ実行の全ライフタイムの値になるということです。パッケージを順次または並行して呼び出すと、その値が変更される可能性がありますが、その 実行すると、値は一定のままになります (値の明示的な変更を除く)。

    /セット

    コマンド ライン実行 (dtexec.exe)、パッケージを右クリックしてファイル システムから実行する (dtexecUI.exe)、または SQL Server Integration Services の SQL エージェント ジョブ ステップを作成するすべてで、SET コマンドを介してランタイム値を提供できます。 .上記の変数を使用して、次のコマンドは実行時の値を C:\Test2.txt に設定します。

    dtexec /file C:\Generated.dtsx /set \Package.Variables[User::CurrentFile].Properties[Value];"C:\Test2.txt"
    

    構成

    SSIS には、パッケージに実行時の値を提供する構成ソースを作成するオプションが用意されています。上でリンクした記事は、ここで説明するよりも、構成オプションの長所と短所をよりよく説明しています。通常は両方を使用します。SET コマンドは接続マネージャーを構成し、パッケージはそれを使用して、パッケージ構成の「完全な」セットを検索します。

    値の計算

    SSIS には、変数の値を変更できるさまざまなタスクや、式を使用して値を変更できるさまざまなタスクがあります。これらは、パッケージが飛行中の価値に基づいて機能するものだと考えています。

    タスク

    スクリプト タスクは、初心者が最もよく使用するメカニズムの 1 つですが、変数値の変更には通常、SSIS ツールキットの他のツールの方が適していることがわかります。

    Foreach ループ コンテナー および SQL タスクの実行 は、変数値の代入について検討する必要がある他の 2 つの大きなタスクです。

    式は、SSIS ツールボックスの中で最も素晴らしいお菓子です。 SSIS のほとんどすべての「もの」は、構成用のプロパティを公開します。これは役に立ちますが、これらのプロパティを構築するために式を代入する方法は優れています。

    たとえば、3 つの変数 RootFolder を想像してください。 、 FileName および ComputedCurrentFile C:\、File2.txt、および空の文字列の値を使用します。 ComputedCurrentFile の [プロパティ] ウィンドウ EvaluateAsExpression の値を False から True に変更し、@[User::RootFolder]+ "\\" [email protected][User::FileName] これは、最初の 2 つの変数の値を連結するだけです。これは、処理するファイル名が標準で、ソース フォルダーが頻繁に変更される場合に役立ちます。または、出力について話している場合は、式を使用して、パッケージが実行されている日付と場合によっては時刻を使用して出力ファイル名を作成するのが一般的です。

    最後に、これらのアプローチの組み合わせを妨げるものは何もありません。私は通常、構成を使用してファイル列挙子を正しい開始フォルダーにポイントし、計算された値を使用して現在処理中のファイルを識別します。



    1. EntityFrameworkがテンポラルテーブルで機能しない

    2. SQLServerの複数の列にチェック制約を作成する方法-SQLServer/TSQLチュートリアルパート84

    3. JDBCを使用してOracleClobを更新する方法

    4. SQLサーバーの条件付き結合