【问题标题】:Stored data set from stored procedure - Execute SQL Task存储过程中的存储数据集 - 执行 SQL 任务
【发布时间】:2017-06-06 13:32:43
【问题描述】:

我有这个存储过程:

Dbo.SprocName (@Id UNIQUEIDENTIFIER, 
               @ResponseCode INT OUTPUT,
               @ResponseDescription VARCHAR(500) OUTPUT)

它返回一个名为Result 的数据集作为nvarchar(MAX)(总是单行)。

我已经尝试过 OLE 和 ADO 连接以及结果集。我已经尝试创建一个表变量并将值存储在那里。

没有任何作用。

我可以在数据库中看到它运行成功,然后在返回结果数据集时失败。

我已经进行了一些调试,我可以确保结果字符串按原样返回。问题是我不知道如何在 SSIS 上处理这个问题。

我得到的错误是:

输入的字符串格式不正确

我很欣赏任何想法。

谢谢。

编辑:我再次尝试使用表变量并且它有效。我想我第一次做得不好。对于那个很抱歉。谢谢!

【问题讨论】:

    标签: ssis resultset sql-server-2016


    【解决方案1】:

    问题的一个潜在原因可能是 SSIS 和 SQL Server 之间的数据类型不匹配。

    SSIS GUID 数据类型与 SQL Server uniqueidentifier 不匹配 - SSIS GUID 有花括号(例如,{00000000-0000-0000-0000-000000000000}),而 SQL 值没有。 SQL 无法将该值识别为唯一标识符,因此无法转换。

    要传递 GUID,您需要在 SSIS 或 SQL 中删除那些花括号。一种方法是我用它作为 VARCHAR 发送它,然后去掉花括号,例如,

    DECLARE @GUID VARCHAR(40) = '{00000000-0000-0000-0000-000000000000}'
    DECLARE @CnvtGUID UNIQUEIDENTIFIER = REPLACE(REPLACE(@GUID, '}', ''), '{', '')
    
    SELECT @GUID, @CnvtGUID
    

    【讨论】:

    • 感谢,但过程返回 nvarchar 并且变量是字符串。我不认为数据类型是问题,而是捕获数据集的方法。我也尝试过修改数据类型。
    • 您是否将值传递给@ID 参数?这就是提示我建议的 uniqueidentifier 数据类型
    • 我明白了。存储过程正在执行,因此输入参数不是问题。我使用了一个表变量来存储我的数据集,所以现在很好。非常感谢您的帮助。
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    相关资源
    最近更新 更多