5

基本的な質問

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);
}
4

1 に答える 1

5

解像度

私はすでにこの質問を書いているので、他の誰かのトラブルを救うことを期待して投稿します。SQL Server 2012 より前、またはBIDSHelperを使用して式を作成していない場合、式で変数を使用するには2 つの手順があります。

  1. 実際の式を割り当てます。
  2. 私が見落としていたのは設定EvaluateAsExpression = trueです。ツールは、そのフラグの設定を自動化するようになりました。

改訂されたコードは単純です

//v.Value = v.Expression.EvaluatePrettyPlease();
// The missing EvaluatePrettyPlease method is the property EvaluateAsExpression
// By setting this property, the expressions actually evaluate
// go figure
v.EvaluateAsExpression = true;
于 2013-04-10T15:40:22.297 に答える