表达式生成器SSIS

时间:2016-01-21 16:03:08

标签: ssis db2

我正在尝试在SSIS Expresion Builder中动态编写查询,但我遇到了错误,非常感谢您的帮助。 这里我的源代码是DB2

我的查询是: -

Select * FROM schema.table_name
WHERE column_a < 100
OR (column_a >= 100 AND column_b = @[User::days]
FOR FETCH ONLY WITH UR

注意:@ [User :: days] =当前日期 - x天

1 个答案:

答案 0 :(得分:1)

这不是它的工作原理。

您可以将SSIS变量与Expression一起使用以满足此要求,或者假设您的源支持它,请参数化查询。

表达

向SSIS包添加变量。称之为QuerySource,输入为String。

如果2012+,在表达式中,而不是值,请使用以下公式

"Select * FROM schema.table_name WHERE column_a < 100 OR (column_a >= 100 AND column_b " 
+ DT_WSTR(5) @[User::days] 
+ " FOR FETCH ONLY WITH UR"

如果是2005/2008,则需要右键单击“变量”窗口中的行并选择“属性”。在结果窗口中,您需要将EvaluateAsExpression设置为True,并将上述内容复制到Expression属性中。

上面的回车是为了便于阅读。它们可能或可能很好地粘贴到您的BIDS / SSDT版本中

现在您已经创建了变量,您需要在源代码中使用它。假设OLEDB,您将需要选择“来自变量的SQL命令”的数据访问模式。如果您使用的是ADO.NET源,则需要进入控制流,单击“数据流任务”并右键单击并选择“属性”。从“属性”窗口中,找到“表达式”。单击省略号。选择ADO.NET源。将变量指定为源。

参数

某些来源,如OLEDB,支持参数化。将数据访问模式设置为SQL命令。

Select * FROM schema.table_name
WHERE column_a < 100
OR (column_a >= 100 AND column_b = ?
FOR FETCH ONLY WITH UR

?是OLE DB连接的基于序数的替换字符。单击“参数”按钮并将@ [User :: days]变量指定给它。