5

基本问题

我是否缺少一种方法来评估 SSIS 中的表达式?

背景故事

我正在以编程方式修复大量软件包,以使它们符合我们的标准。以最简单的形式,假设我正在创建一个新变量并为其分配一个表达式。这工作正常。

带表达式的变量

如果我单击省略号,然后单击结果对话框窗口中的 Evaluate Expression,我会看到我的公式计算在语法上是正确的,并且在逻辑上它正在生成我期望的值。评估如何进行?

评估表达式

当我在上一步中单击“确定”时,请注意我的变量的更改.Value。它现在填充了表达式的评估版本。我需要在我的代码中模拟相同的步骤,但我不知道它在 BIDS/SSDT 中是如何做到的。从概念上讲,这只是variable.Value = MAGIC;我在巫师 101 中失败了。

为什么这是个问题

我正在执行的实际工作比这要复杂得多。我正在添加和配置几个任务以及处理数据流。其中一个步骤是添加一个执行 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创建表达式,则有两个步骤可以将变量与表达式一起使用。

  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 回答