我是否缺少一种方法来评估SSIS中的表达式?
我正在以编程方式修复大量软件包,使其符合我们的标准。以最简单的形式,假设我正在创建新的variable并在其上分配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);
}
答案 0 :(得分:5)
由于我已经写过这个问题,我将发布它以期拯救别人的麻烦。在SQL Server 2012之前,或者如果不使用BIDSHelper来创建表达式,则使用带表达式的变量有 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;