游标遍历exec动态sql语句查询结果

2 篇文章 0 订阅
1 篇文章 0 订阅

游标比较特殊,可以在EXEC()中创建后再引用,通常用于动态游标.可以这样处理:

declare @sql varchar(8000),@table sysname
set @table = 'table1'
set @sql='DECLARE abc CURSOR FOR select * from ' + @table
exec(@sql)
OPEN abc
...

下面是动态游标测试的例子:
if object_id('tbTest') is not null
drop table tbTest
GO
----创建测试数据
create table tbTest(id int,name varchar(10))
insert tbTest
select 1,'a' union all
select 2,'b' union all
select 3,'c' 
GO
declare @table sysname,@id int,@name varchar(10)
declare @sql varchar(1000)
set @table = 'tbTest'
----定义动态游标
set @sql = 'declare abc CURSOR for select id,name from ' + @table
----创建动态游标
EXEC(@sql)
----打开游标
OPEN abc
FETCH NEXT FROM abc INTO @id,@name
WHILE @@fetch_status = 0
begin
    select @id,@name
    FETCH NEXT FROM abc INTO @id,@name
end
----清除游标
CLOSE abc
DEALLOCATE abc
----清除测试环境
drop table tbTest

/*结果
----------- ----------
1 a


----------- ----------
2 b


----------- ----------
3 c
*/

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值