游标和等效游标的两种方法
1.游标
定义游标:declare tCs cursor
for select dd,ss from table
打开游标:
open tcs
读取游标值:
Fetch next from tCs into @dd,@ss --这边数据列需和定义的游标列数一致
while (@@Fetch_Status=0)--表示读取成功
begin
需要的处理过程
Fetch next from tCs into @dd,@ss--读取下一条,如果没有则@@Tetch...不为0
end
2.等效游标的处理方法
以下两种方法各有弊端:第一种,只适用于id为自增长的情况。id出现重复时,则重复的数据只处理了一条。
第二种,适用于比较小数量的处理。
1) 获取数据中最小ID,逐条处理数据。
获取需要处理数据的最小ID:select @minid=min(id) from table
while isnull(@minId,0)>0 --如果取出结果为空null --跳出循环
begin
select * from where id=@minid--取出这条记录处理
--do sth….
select @minId=min(id) from table where id>@minid--初始化下一个最小ID:
end
2) 将数据存入临时表中,此临时表设置自增长主键。通过它循环处理数据
创建表变量:
create @table table( id int identity(1,1),na varchar)
insert into @table select na from table
select @id=select min(id),@count=count(1) from @table
while @count>@id
begin
select * from table where id=@id
-- do something…..
set @id=@id+1
end