【问题标题】:Large query as variable not evaluating in dataflow expression builder SSIS大型查询作为变量不在数据流表达式构建器 SSIS 中评估
【发布时间】: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


    【解决方案1】:

    SSIS 中的变量也限制为 4000 个字符,您可以将查询拆分为多个子查询。

    【讨论】:

      【解决方案2】:

      当您使用 OLE DB 连接时,我找到了解决方案。准备起来很复杂,但最终运行正常。以前,您需要使用相似且相同的结构查询和 4000 个字符查询重新定义变量。 下一个链接解释了如何做到这一点。 ssis more than 4000 chars

      【讨论】:

        【解决方案3】:

        SQL 2012 之后(我认为)不存在可变大小的限制。

        但是,例如在 SQL 2017 中,您可以将大量数据放入一个字符串变量中(我尝试使用超过 20 MB)并且效果很好。但是当您尝试对其进行字符串操作时,在诸如 FINDSTRING 之类的表达式中,您会收到 DTS_E_EXPREVALSTRINGVARIABLETOOLONG 错误。

        我的解决方案是使用脚本任务,因为在 .NET 中您没有此限制。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-17
          • 1970-01-01
          相关资源
          最近更新 更多