Sql cursor 基本应用

1、游标格式:

DECLARE 游标名称 CURSOR FOR SELECT 字段1,字段2,字段3,... FROM 表名 WHERE ...
OPEN 游标名称
FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...
WHILE @@FETCH_STATUS=0
    BEGIN
       SQL语句执行过程... ...
       FETCH NEXT FROM 游标名称 INTO 变量名1,变量名2,变量名3,...
    END
CLOSE 游标名称
DEALLOCATE 游标名称 (删除游标)

2、游标应用实例:

table1结构如下:
id    int
name  varchar(50)

declare @id int
declare @name varchar(50)
declare cursor1 cursor for --定义游标cursor1
select id,name from table1 --使用游标的对象【必须是表结构,如果按符号分割的字符串可以用fn_split分割成临时表的结构】
open cursor1               --打开游标

fetch next from cursor1 into @id,@name  --将游标向下移1行,获取的数据放入之前定义的变量@id,@name中

while @@fetch_status=0           --判断是否成功获取数据
begin
    update table1 set name=name+'1'
    where id=@id                           --进行相应处理(跟据需要填入SQL文)

    fetch next from cursor1 into @id,@name  --将游标向下移1行【如果执行完多一行,那就是Fetch的格式没写对】
end

close cursor1                   --关闭游标
deallocate cursor1              <span style="font-family: Arial;">--删除游标</span>
3、游标可以嵌套:嵌套时必须按照实例2中的fetch的格式写游标,否则会导致内部游标错乱

declare id_cursor cursor for
select street_id from mapping_street_merge
open id_cursor

declare @street_id int
set @street_id = 0
fetch next from id_cursor into @street_id
while @@FETCH_STATUS=0
begin

	fetch next from street_cursor into @index_id
	while @@FETCH_STATUS=0
	begin
		--Do something
			
		fetch next from street_cursor into @index_id
	end
	close street_cursor
	deallocate street_cursor

	--Do something

	fetch next from id_cursor into @street_id
end
close id_cursor
deallocate id_cursor


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值