【问题标题】:Convert SSIS Object variable to String/Varchar(MAX) to pass it as a parameter for another Stored Procedure将 SSIS 对象变量转换为 String/Varchar(MAX) 以将其作为参数传递给另一个存储过程
【发布时间】:2019-05-07 19:02:49
【问题描述】:

SSIS 中的执行 SQL 任务有一个 sql SELECT 查询,它返回一个 Varchar(MAX) 值,我将它分配给一个 SSIS 字符串变量,resultset as single row 引发了关于 Casting 的错误。

所以我将 SSIS 变量类型更改为对象。

现在的问题是我有另一个执行 SQL 任务,它使用这个 SSIS 变量作为存储过程的参数,但它的类型是 VARCHAR(MAX)。我怎样才能实现它?

基本上,我试图将 SSIS 对象变量传递给 Varchar(MAX) 或字符串变量,以将其传递给另一个存储过程。

【问题讨论】:

  • 漏洞太多。你确定你想要一个 object 变量而不是 string 吗?如果是这样,你为什么不使用 full result set ?您的SELECT 查询到底返回了什么?是 1 行还是多行?
  • selectSP 是否在同一个数据库中?只需编写一段 T-SQL 即可完成所有操作
  • 我很确定单行可以将每一列分配给一个变量
  • 您需要修复尝试将结果存储在字符串变量中时遇到的错误。很遗憾,您没有告诉我们错误是什么,因此在您提供更多信息之前,我们无法为您提供进一步的帮助。
  • 我得到一个超过 8000 个字符的单行,我不希望 SQL 中的数据被截断。所以我在 SSIS 中使用了对象变量(如果我在 SSIS 中使用字符串变量并将 SQL 查询用作 VARCHAR(8000),但数据被截断,则工作得很好)。 SQL 和最终的存储过程在不同的数据库中。我试图从对象中读取值,并使用脚本任务将其分配给字符串变量,但我只能看到“System._COMObject”作为值。

标签: ssis ssis-2012


【解决方案1】:

将变量类型改回字符串并使用:

CAST([YourColumn] AS varchar(8000)) AS [YourVariableResultName]

如果没有,请发布您在投射时遇到的错误

【讨论】:

  • 如果我 CAST 它,我的数据将被截断为 8000 个字符。对吗?
  • @ShibinG 没错,是的。如果值超过 8000 个字符,那么您需要考虑解决方案吗?如果数据与您的存储过程在同一个数据库中,那么您可以在存储过程中完成所有操作。如果它来自另一个数据库,那么您可能会考虑在运行您的 SP 的执行 sql 任务之前将数据获取到 SP 所在的数据库(可能是数据流任务)
【解决方案2】:

解决了。将执行 SQL 任务结果集更改为完整结果集并将其分配给对象变量。然后使用 Foreach 项目容器并将该对象变量设置为源并将 0 索引值分配给字符串变量。然后将其传递给存储过程。谢谢大家的帮助。,☺️

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    相关资源
    最近更新 更多