游标的问题

linguojin11 2009-07-14 10:16:06
create table lin(id int ,name varchar(100))
insert into lin select 1,'a'
INSERT INTO LIN SELECT 2,'B'
go
declare tcursor cursor for select name from lin
declare @a varchar(100)
open tcursor
fetch next from tcursor into @a
WHILE @@FETCH_STATUS = 0
BEGIN

declare @a1 table(name varchar(100))
insert @a1(name) values(@a)

FETCH NEXT from tcursor into @a
print @a --------------------注意点
END
close tcursor
deallocate tcursor

go
drop table lin
-----------------------------------
结果是:(1 行受影响)
B

(1 行受影响)
B
-------------------------------------------

----------------------------------------------------------------------------------------------


create table lin(id int ,name varchar(100))
insert into lin select 1,'a'
INSERT INTO LIN SELECT 2,'B'
go
declare tcursor cursor for select name from lin
declare @a varchar(100)
open tcursor
fetch next from tcursor into @a
WHILE @@FETCH_STATUS = 0
BEGIN

declare @a1 table(name varchar(100))
insert @a1(name) values(@a)

FETCH NEXT from tcursor ----不同之处在这里
print @a
END
close tcursor
deallocate tcursor

go
drop table lin
---------------------------------------------

(1 行受影响)
name
----------------------------------------------------------------------------------------------------
B

(1 行受影响)

a

(1 行受影响)
name
----------------------------------------------------------------------------------------------------

(0 行受影响)

a
-----------------------------------------------------------------------------
...全文
100 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
linguojin11 2009-07-16
  • 打赏
  • 举报
回复
大哥,第2个例子呢...
linguojin11 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 herowang 的回复:]
正常,执行过程如下:以第一个为例
1、第一个fetch 得到a,插入以后,再fetch 得到B,那么打印自然是B,取下一条成功后,继续循环,插入以后,取下一条不成功,所以@a依然是B,打印的自然还是B,因为读取下一条不成功,退出循环。
[/Quote]
大哥,第2个例子呢...
  • 打赏
  • 举报
回复
正常,执行过程如下:以第一个为例
1、第一个fetch 得到a,插入以后,再fetch 得到B,那么打印自然是B,取下一条成功后,继续循环,插入以后,取下一条不成功,所以@a依然是B,打印的自然还是B,因为读取下一条不成功,退出循环。
-狙击手- 2009-07-14
  • 打赏
  • 举报
回复
declare tcursor cursor for select name from lin 
declare @a varchar(100)
declare @a1 table(name varchar(100))
open tcursor
fetch next from tcursor into @a
WHILE @@FETCH_STATUS = 0
BEGIN


insert @a1(name) values(@a)
print @a
fetch next from tcursor into @a

END
close tcursor
deallocate tcursor
Four 2009-07-14
  • 打赏
  • 举报
回复
想说什么?
-狙击手- 2009-07-14
  • 打赏
  • 举报
回复
declare tcursor cursor for select name from lin 
declare @a varchar(100)
open tcursor
fetch next from tcursor into @a
WHILE @@FETCH_STATUS = 0
BEGIN

declare @a1 table(name varchar(100))
insert @a1(name) values(@a)
print @a
fetch next from tcursor into @a

END
close tcursor
deallocate tcursor

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧