【发布时间】:2017-01-23 12:21:27
【问题描述】:
我在 SSIS (SQL 2008 R2) 的数据流中通过 ADO 网络数据源查询缓存数据库。我想将参数传递给查询,但只能通过数据流项的表达式部分执行此操作。查询本身超过 4000 个字符,因此我不能以原始形式在表达式部分使用查询(由于 4000 个字符的限制)。
我尝试使用脚本任务将查询分配给字符串变量 [User::Query1],但是当我单击数据流表达式构建器屏幕中的评估表达式按钮时,它什么也不返回。 [ADO NET Source].[SQLCommand] 有以下表达式:
@[User::Query1]
运行包时,我收到一条错误消息,指出 SQL 命令未正确设置。检查 SQLCommand 属性。
我已将 ValidateExternalMetaData 设置为 false,我在执行结果中看到以下错误;
Error: The variable User::Query1 contains a string that exceeds the maximum allowed length of 4000 characters.
Error: Reading the variable "User::Query1" failed with error code 0xC0047100.
Error: The expression "@[User::Query1]" on property "[ADO NET Source].[SqlCommand]" cannot be evaluated. Modify the expression to be valid.
在我的脚本任务中,我将整个查询分配给一个字符串变量,然后我使用下面的 vb 代码将字符串分配给实际变量:
Dts.Variables("User::Query1").Value = sSql
MessageBox.Show(Dts.Variables("User::Query1").Value.ToString())
在脚本任务属性中,我将 [User::Query1] 作为 ReadWriteVariables。我还确保 [User::Query1] 的 EvaluateAsExpression 设置为 true。
本质上,我正在尝试使用数据流的表达式属性运行查询,因为这将允许我使用动态参数值。
【问题讨论】:
标签: sql-server ssis