2016-09-16 65 views
0

我问几天前关于正确的方法来从一个SQL Server存储过程返回结果的多行,并建议我使用下列SQL服务器游标不返回多行到Excel

select @var01, @var02 

这似乎直到我用它在一个循环打算返回多行数据,如我目前的存储过程,以做工精细

if(object_id('sp_looga')) is not null 
    drop procedure sp_looga 
go 

create procedure sp_looga 
as 

    declare @idno integer 
    declare @desc char(50) 

    declare colours_cur cursor for 
    select co_idno, co_desc from colours 
    where co_status != 'A' 
    order by co_idno 

    open colours_cur 
    fetch next from colours_cur into @idno, @desc 

    while @@fetch_status = 0 
    begin 

     select @idno, @desc 

    fetch next from colours_cur into @idno, @desc 
    end 
    close colours_cur deallocate colours_cur 

go 

如果我执行它似乎完美地工作,这里面的SQL Server管理员,但是当我执行它从Excel中只返回一行?

回答

0

在这种情况下,我看不出有任何需要使用游标。当您在光标内选择那样的结果时,您会返回一系列单独的结果而不是单个表格。虽然以编程方式您可以捕获每个结果并将它们合并在一起我不确定您可以在Excel中做到这一点,也不需要。我只会返回封装的查询。

if(object_id('sp_looga')) is not null 
    drop procedure sp_looga 
go 

create procedure sp_looga 
as 

    select co_idno, co_desc from colours 
    where co_status != 'A' 
    order by co_idno 

go 

作为一个侧面说明 - 除非你需要使用存储过程,你可以运行从Excel查询,据我可以看到编辑数据连接属性定义为类型SQL并输入命令文本。

编辑:

我看看你的other岗位。您需要使用Dan Guzman的解决方案,使用INSERT...EXEC在Excel和其他过程之间共享此过程的结果。您实际上在原始解决方案中处于正确的轨道上,但不应使用SELECT ing变量名称,而应该执行类似INSERT #TEMP EXEC proc_name的操作。唯一需要注意的是,您需要先登录临时表CREATE