表达式生成器 SSIS

Expression Builder SSIS

我正在尝试在 SSIS 表达式生成器中动态编写查询,但我遇到了一个错误,非常感谢您的所有帮助。 这里我的来源是 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 天

事情不是这样的。

您可以使用带有表达式的 SSIS 变量来满足此要求,或者假设您的源支持它,将查询参数化。

表达式

向 SSIS 包添加一个变量。称之为QuerySource,类型为String。

如果是2012+,在Expression中,不是Value,使用下面的公式

"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,则需要右键单击变量 window 和 select 属性中的行。在生成的 window 中,您需要将 EvaluateAsExpression 设置为 True,并将上述内容复制到 Expression 属性 中。

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

版本中

现在您已经创建了变量,您需要在源代码中使用它。假设使用 OLEDB,您将希望 select 数据访问模式为 "SQL Command from Variable"。如果您使用的是 ADO.NET 源,那么您需要到控制流,单击数据流任务并右键单击和 select 属性。从属性 window 中,找到表达式。单击省略号。 Select 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] 变量分配给它。