SSISの複数パッケージで、変数や接続マネージャの設定情報を共有するには、ちょっと面倒なことをやらないと、
ダメみたいっす。
■共通変数定義手順
手順1:
まず、Visual Studio 2008 で、SSIS(Integration Services)のプロジェクトを作成し、
下記のようなプロジェクト構成を用意します。
この例では、Package1.dtsx、Packpage2.dtsx が、独自の制御フローやデータフローを定義したものだと想定してください。
そして、Env.dtsx が Package1.dtsx と Package2.dtsx で共通で使用する変数やテキストファイル等の
フラットファイル、データベースの接続設定を定義するパッケージだとお考え下さい。
手順2:
Env.dtsx(共通定義用パッケージ)を開き、[制御フロー]のデザイン画面を選択し、[制御フロー]画面の
任意の場所を右クリックします。
メニューに[変数]という選択肢があるので、選択します。
手順3:
Env.dtsx(共通定義用パッケージ)のデザイナ画面の左側に
[変数]ウィンドウが表示されるので、試しに、変数a を下記のように設定します。
変数名:a
スコープ:パッケージのスコープ名が自動設定されます
データ型:String
値: Hello World
手順4:
開いているEnv.dtsx(共通定義用パッケージ)の[制御フロー]デザイナの任意の場所を右クリックし、
[パッケージの構成]を選択します。
手順5:
[パッケージ構成オーガナイザ]画面で、[パッケージの構成を有効にする]チェックボックスをONにします。
手順6:
[パッケージ構成オーガナイザ]画面で[追加]ボタンをクリックします。
手順7:
[パッケージ構成ウィザード]画面で[次へ]ボタンをクリックします。
手順8:
[構成の種類]で、変数の定義や接続マネージャーの情報をどこに格納するか選択します。
設定ファイルで手軽に接続先や変数の内容を変えたい場合は、[XML 構成ファイル]や[SQL Server]がおすすめです。
また、頻繁に設定内容を変更しない場合(永続的に保持したい場合)は、環境変数やレジストリに格納することもできます。
今回は、[構成の種類]で[XML 構成ファイル]を選択し、構成ファイル(*.dtsConfigファイル)の保管場所を指定します。
指定後、[次へ]ボタンをクリックします。
手順9:
[エクスポートするプロパティの選択]画面のオブジェクト欄で、変数a をドリルダウンし、
Properties から [Value]プロパティのチェックをONにします。
また、上記手順では紹介していませんが、[データフロー]で使用するフラットファイルやデータベース接続情報を共通化したい場合は、
事前に定義しておき、下記の画面のように、[接続マネージャ]から共通化したい接続設定を選択します。
選択後、[次へ]ボタンをクリックします。
手順10:
構成名に任意の名前を入力し、[完了]ボタンをクリックします。
また、[パッケージ構成オーガナイザ]画面に戻ったら、[閉じる]ボタンをクリックし、
Env.dtsx ファイルを保存します。
■各々のパッケージで共通変数を参照してみる
手順11:
Package1.dtsx を開き、デザイナの[制御フロー]タブ内の任意の場所を右クリックします。
その後、手順2と同じように、[変数]メニューをクリックします。
手順12:
Package1.dtsxデザイナ画面の左側に
[変数]ウィンドウが表示されるので、変数a を宣言します。
この際、[値]の欄は未入力にします。
変数名:a
スコープ:パッケージのスコープ名が自動設定されます
データ型:String
値: 空(ブランク)にしてください。
手順13:
開いているPackage1.dtsx の[制御フロー]デザイナの任意の場所を右クリックし、
[パッケージ構成]を選択します。
手順14:
手順5、手順6同様、[パッケージ構成オーガナイザ]画面で、[パッケージの構成を有効にする]チェックボックスをONにし、
[追加]ボタンをクリックします。
手順15:
手順7同様、[パッケージ構成ウィザード]画面で[次へ]ボタンをクリックします。
手順16:
[構成の種類]欄で、手順8で指定した、*.dtsConfig が保管されている場所を指定します。
指定後、[次へ]ボタンをクリックします。
[次へ]ボタンをクリックした際、下記のようなダイアログメッセージが表示されますので、
[既存ファイルの再利用]を選択します。
手順17:
手順10同様、構成名に任意の名前を入力し、[完了]ボタンをクリックします。
また、[パッケージ構成オーガナイザ]画面に戻ったら、[閉じる]ボタンをクリックし、
Package1.dtsx ファイルを保存します。
■動作検証
手順18:
Package1.dtsx ファイルの[制御フロー]に図のような[スクリプトタスク]を[ツールボックス]ウィンドウから配置します。
手順19:
配置したスクリプトタスクをダブルクリックし、[スクリプト タスク エディタ]画面を開きます。
[ReadOnlyVariables]という項目に[User::a]と入力します。
(定義した変数aを読み取り専用で使用しますよという意味です)
入力後、画面下にある[スクリプトの編集]ボタンをクリックします。
手順20:
変数a をメッセージボックスで表示するよう、Mainメソッドに下記のコードを入力します。
(このとき、namespaceは変えないでください。ちなみに下記のコードはC#で記述してます。コードをパクるのは、Mainメソッドの中だけにしてください)
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
namespace ST_e339f3c5c4bc49f5b170179dd385a136.csproj
{
[System.AddIn.AddIn("ScriptMain", Version = "1.0", Publisher = "", Description = "")]
public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
{
#region VSTA generated code
enum ScriptResults
{
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
};
#endregion
public void Main()
{
MessageBox.Show(Dts.Variables["a"].Value.ToString());
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}
手順21:
ScriptMain.cs ファイルを保存し、ScriptMain.cs を開いているVisual Studio の画面を閉じます。
また、手順19で起動した、[スクリプト タスク エディタ]画面の[OK]ボタンをクリックします。
手順22:
Package1.dtsx ファイルを保存し、[デバッグ]メニューから[デバッグの開始]を選択します。
(F5 でもいいです)
スクリプトタスクの実行結果が黄色(正常終了)に変化し、Hello World のメッセージが表示されれば、
共通変数を参照させることに成功しています。
なお、コマンドラインで、共通変数や共通定義情報が格納されている*.dtsCofig ファイルをロードするには、
DTEXEC /File “C:\SSIS\Package.dtsx” /ConfigFile “C:\SSIS\SSISパッケージ共通定義.dtsConfig”
と指定すると、設定情報をロードできます。
DTEXEC のパラメータの意味については、
MSDNのdtexec ユーティリティをご覧ください。
また、SQL Server 2005 と SQL Server 2008 R2 では、パラメータによって動作が異なります。
MSDNの SQL Server 2008 R2 における Integration Services 機能の動作の変更 あたりも
ご確認頂ければと思います。いろいろと面倒ですが、慣れるしかありませんね。ご参考までにどうぞ。