SQLSEVER使用游标的存储过程把结果集合并成一个表里

存储过程使用了游标  想最终查询结果是使用游标后返回的所有结果放在一个表里

--测试数据

if not object_id(N'Tempdb..#T') is null

drop table #T

Go

Create table #T([id] int,[name] nvarchar(22))

Insert #T

select 1,N'张三' union all

select 2,N'李四' union all

select 3,N'王五' union all

select 4,N'赵六'

Go

--测试数据结束

--select*from #t

--

--创建一个游标

declare my_cursor cursor for     --my_cursor为游标的名称,随便起

select id,name from #T     --这是游标my_cursor的值,这里随便发挥看业务场景

--打开游标

open my_cursor                  --没什么好说的

--变量

declare   @id int               --声明变量  ‘declare’为声明变量 ‘@name’为变量名称 后面为变量类型

declare   @name varchar(50)     --这里是两个变量用来接收游标的值

--循环游标

fetch next from my_cursor into @id,@name  --获取my_cursor的下一条数据,其中为两个字段分别赋值给@id,@name

while @@FETCH_STATUS=0 --假如检索到了数据继续执行

begin

print(@name) --print()打印变量 随便发挥

select * from #T where id=@id --这里是具体业务了,随便发挥。而我这是又执行了一次查询 

fetch next from my_cursor into @id,@name --获取下一条数据并赋值给变量

end--关闭释放游标

close my_cursor

deallocate my_cursor

微信截图_20220309091528.png

柿柿 发布于 2022-3-9 09:15
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-3-9 09:25(编辑于 2022-3-9 09:34)

再用一个临时表,游标里面的查询结果写入该表,游标释放后从该表中查询

if not object_id(N'Tempdb..#TT') is null

drop table #TT

Create table #TT([id] int,[name] nvarchar(22))

---上面新增一个临时表TT

if not object_id(N'Tempdb..#T') is null

drop table #T

Go

Create table #T([id] int,[name] nvarchar(22))

Insert #T

select 1,N'张三' union all

select 2,N'李四' union all

select 3,N'王五' union all

select 4,N'赵六'

Go

--测试数据结束

--select*from #t

--

--创建一个游标

declare my_cursor cursor for     --my_cursor为游标的名称,随便起

select id,name from #T     --这是游标my_cursor的值,这里随便发挥看业务场景

--打开游标

open my_cursor                  --没什么好说的

--变量

declare   @id int               --声明变量  ‘declare’为声明变量 ‘@name’为变量名称 后面为变量类型

declare   @name varchar(50)     --这里是两个变量用来接收游标的值

--循环游标

fetch next from my_cursor into @id,@name  --获取my_cursor的下一条数据,其中为两个字段分别赋值给@id,@name

while @@FETCH_STATUS=0 --假如检索到了数据继续执行

begin

print(@name) --print()打印变量 随便发挥

-----将游标中满足条件的数据写入临时表TT

INSERT INTO #TT select * from #T where id=@id --这里是具体业务了,随便发挥。而我这是又执行了一次查询 

fetch next from my_cursor into @id,@name --获取下一条数据并赋值给变量

end--关闭释放游标

close my_cursor

deallocate my_cursor

---从临时表TT中取数

SELECT * FROM #TT

  • 柿柿 柿柿(提问者) 可以写一个看看嘛~
    2022-03-09 09:27 
  • Z4u3z1 Z4u3z1 回复 柿柿(提问者) 看补充
    2022-03-09 09:35 
  • 柿柿 柿柿(提问者) 大哥 求指点~https://bbs.fanruan.com/wenda/question/112883.html
    2022-03-09 11:57 
最佳回答
0
yzm339714Lv6中级互助
发布于2022-3-9 09:36

不用游标试试?  select *  from #T where id in (select id from #T)  这样就可以

  • 2关注人数
  • 304浏览人数
  • 最后回答于:2022-3-9 09:36
    请选择关闭问题的原因
    确定 取消
    返回顶部