教程要来讲一下关于mssql server 的打开游标 关闭游标 删除游标以衣游标的应用实例


declare @mergedate datetime

declare @masterid int

declare @duplicateid int

select @mergedate = getdate()


declare merge_cursor cursor fast_forward for select mastercustomerid, duplicatecustomerid from duplicatecustomers where ismerged = 0

--定义一个游标对象[merge_cursor]

--该游标中包含的为:[select mastercustomerid, duplicatecustomerid from duplicatecustomers where ismerged = 0 ]查询的结果.

open merge_cursor

--打开游标

fetch next from merge_cursor into @masterid, @duplicateid

--取数据到临时变量

while @@fetch_status = 0 --系统@@fetch_status = 0 时循环结束

--做循环处理

begin

exec mergeduplicatecustomers @masterid, @duplicateid

update duplicatecustomers

set

ismerged = 1,

mergedate = @mergedate

where

mastercustomerid = @masterid and

duplicatecustomerid = @duplicateid

fetch next from merge_cursor into @masterid, @duplicateid

--再次取值

end

close merge_cursor

--关闭游标

deallocate merge_cursor

--删除游标


讲解游标的技术实现

  学习msqsql中的游标 我们需要先建立一张数据表,用以模拟数据:

创建数据表student,里面包含有4个列

create table student

(

id int identity(1,1) primary key,  --自动增长编号

name varchar(20) not null,         --姓名

age int not null,                  --年龄

address  varchar(100) not null,    --地址

)

使用游标有4个过程:声明游标、打开游标、提取数据、关闭游标。

declare pcurr cursor for  --声明一个名为pcurr游标

declare @customer nvarchar(50)

declare @age int


select name,age from student --这个查询结果非常重要,这个就是我们需要用游标读取的数据集

open pcurr  --打开游标

fetch next from pcurr into @customer,@age

while (@@fetch_status = 0) --判断游标是否读取完毕,读取完毕,这里将返回100而不是0

begin

print (@customer)

print  (@age)

fetch next from pcurr into @customer,@age --取值,由于我们全面的结果集返回返回的是2行记录,这里我们就需要2个自定义参数去取出结果集

close pcurr  --关闭游标

deallocate pcurr --释放游标

close 与 deallocate 的不同点:

close是关闭游标

,这个时候游标还是存在的,我们可以再次打开,deallocate是释放游标,这个时候游标已经不存在,如果我们需要使用游标,就不许重新声明一次

http://www.111cn.net/database/mssqlserver/34397.htm