OpenRowSet存储过程返回数据捕获

时间:2014-05-09 19:14:54

标签: sql sql-server stored-procedures

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

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

什么有效:数据从Informix返回正常,但我需要在表格的列名中。

我尝试了什么:

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

  2. 使用OpenQuery尝试了链接服务器,但实际上遇到了更多麻烦 - 无法从Informix中获取数据。

  3. 通用代码:

    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;
    

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

    enter image description here

    想法?感谢。

1 个答案:

答案 0 :(得分: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;