【问题标题】:OpenRowSet Stored Procedure Returned Data CaptureOpenRowSet 存储过程返回数据捕获
【发布时间】:2014-06-27 15:31:17
【问题描述】:

情况:SQL Server 2008 查询调用 Informix IDS 11.7 上的存储过程

我需要使用动态 SQL 在变量中捕获来自 N'SELECT * 的所有返回数据(不希望在临时表中)。

什么有效:数据可以从 Informix 正常返回,但我需要在表单的列名中使用它。

我尝试过的:

  1. N'SELECT @Credit = * 不起作用,因为在 N'SELECT @Credit = cx.SP_Credit 中没有引用来自 Informix SP 的列名称

  2. 尝试使用OpenQuery 链接服务器,但实际上遇到了更多问题——无法从返回的 Informix 获取数据。

通用代码:

DECLARE @parameter NVARCHAR(32)
DECLARE @Credit    NVARCHAR (32)

SET @parameter = N'@Credit NVARCHAR (32)  OUTPUT'

DECLARE @SQL_TEXT   NVARCHAR(1000)

SET @SQL_TEXT = N'Select * from OPENROWSET ( ''MSDASQL'' , ''DSN=Informix_DB'' , ''execute procedure an_informix_stored_procedure ("parameter1", "parameter2")'') as cx'

EXECUTE sp_executesql
    @SQL_TEXT,
    @parameter,
    @Credit OUTPUT;

select @Credit as credit;

到目前为止的结果(我希望将“1-3”存储在当前为 NULL 的 Credit 列中):

想法?谢谢。

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案1】:

    试试这个:

    DECLARE @parameter NVARCHAR(32)
    DECLARE @Credit    NVARCHAR (32)
    
    SET @parameter = N'@CreditOut NVARCHAR (32)  OUTPUT'
    
    DECLARE @SQL_TEXT   NVARCHAR(1000)
    
    SET @SQL_TEXT = N'SET @CreditOut = (Select * from OPENROWSET ( ''MSDASQL'' , ''DSN=Informix_DB'' , ''execute procedure an_informix_stored_procedure ("parameter1", "parameter2")'') as cx)'
    
    EXECUTE sp_executesql
        @SQL_TEXT,
        @parameter,
        @CreditOut = @Credit OUTPUT;
    
    select @Credit as credit;
    

    【讨论】:

    • 请注意,如果返回多于一列或多于一行,则会失败。在这种情况下,您实际上并没有返回一个记录集,而是返回了一个标量。
    • 好点。事实上,我现在确实需要为不同的 Informix 过程捕获记录/结果集。我也需要一些帮助来解决这个问题。有什么建议吗?
    • (抱歉,在上面发表评论时被打断了,我的 5 分钟已过期)好点 @ElectricLlama。事实上,我现在确实需要为不同的 Informix 过程捕获记录/结果集。有小费吗?最终,我需要为只能进行 SELECT 调用的表单创建具有上述代码的存储过程的视图。这是我正在尝试做的链接:link。我可以让链接中的示例运行良好,但是当我尝试查看我的存储过程时,我收到没有结果集的错误。
    • 请忽略我上面的2个cmets。由于 Views 不能接受参数,我必须尝试不同的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-05-02
    • 2018-08-20
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2017-12-29
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多