SQL服务器游标不返回多行到Excel
问题描述:
我问几天前关于正确的方法来从一个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中只返回一行?
答
在这种情况下,我看不出有任何需要使用游标。当您在光标内选择那样的结果时,您会返回一系列单独的结果而不是单个表格。虽然以编程方式您可以捕获每个结果并将它们合并在一起我不确定您可以在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
。