declare @mergedate datetime
declare @masterid int
declare @duplicateid intselect @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, @duplicateidupdate duplicatecustomers
set
ismerged = 1,
mergedate = @mergedate
where
mastercustomerid = @masterid and
duplicatecustomerid = @duplicateidfetch next from merge_cursor into @masterid, @duplicateid
--再次取值
endclose 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 intselect 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是释放游标,这个时候游标已经不存在,如果我们需要使用游标,就不许重新声明一次