基本的な質問
SSIS 内で式を評価するために欠落している方法はありますか?
裏話
多数のパッケージをプログラムで修正して、標準に準拠するようにしています。最も単純な形式では、新しい変数を作成し、それに式を割り当てるとします。これはうまくいきます。
省略記号をクリックし、表示されたダイアログ ウィンドウで [式の評価] をクリックすると、式の評価が構文的に正しく、論理的に期待値を生成していることがわかります。評価はどのように行われますか?
.Value
前の手順で [OK] をクリックすると、変数の が変更されていることに注意してください。これで、評価されたバージョンの式が取り込まれました。コード内で同じ手順をシミュレートする必要がありますが、BIDS/SSDT でそれを行う方法がわかりません。概念的には、variable.Value = MAGIC;
魔法使い 101 に失敗しただけです。
なぜこれが問題なのか
私が行っている実際の作業は、これよりもはるかに複雑です。いくつかのタスクを追加して構成し、データフローをいじっています。これらの手順の 1 つは、式が割り当てられた変数 (どのテーブルをパントするか) を使用して、既存のデータをテーブルから削除する SQL 実行タスクを追加することです。パッケージのランタイムは、実際の式を評価していないようです...その結果、私の問題が見つかりました。
再生コード
/// <summary>
/// Create a simple package with a variable that has an expression to figure
/// out how to evaulate the resulting value.
/// </summary>
static void ExpressionPOC()
{
Microsoft.SqlServer.Dts.Runtime.Package p = new Microsoft.SqlServer.Dts.Runtime.Package();
Microsoft.SqlServer.Dts.Runtime.Application app = new Microsoft.SqlServer.Dts.Runtime.Application();
p.Name = "ProofOfConcept";
Microsoft.SqlServer.Dts.Runtime.Variable v = null;
// This creates a simple variable of type string with an initial value of blank string
v = p.Variables.Add("ContrivedExample", false, "User", string.Empty);
v.Expression = @"""My package is named "" + @[System::PackageName]";
// Looking for something here to
//v.Value = v.Expression.EvaluatePrettyPlease();
app.SaveToXml(@"C:\Users\bfellows\Documents\Visual Studio 2012\Projects\Demo\Demo\testVariable.dtsx", p, null);
}