SQL SERVER循环遍历(普通循环和游标循环)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL SERVER循环遍历(普通循环和游标循环)相关的知识,希望对你有一定的参考价值。

 

1、首先需要一个测试表数据Student

技术分享

2、普通循环

1)循环5次来修改学生表信息

--循环遍历修改记录--
declare @i int   
set @i=0
while @i<5
begin
    update Student set demo = @i+5 where [email protected]
    set @[email protected] +1 
end
--查看结果--
select * from Student

2)执行后的查询结果

技术分享

3、游标循环(没有事务)

1)根据学生表实际数据循环修改信息
---游标循环遍历--
begin
    declare @a int,@error int    
    declare @temp varchar(50)
    set @a=1
    set @error=0
    --申明游标为Uid
    declare order_cursor cursor 
    for (select [Uid] from Student)
    --打开游标--
    open order_cursor
    --开始循环游标变量--
    fetch next from order_cursor into @temp
    while @@FETCH_STATUS = 0    --返回被 FETCH语句执行的最后游标的状态--
        begin            
            update Student set [email protected],[email protected] where [email protected]
            set @[email protected]+1
            set @error= @error + @@ERROR   --记录每次运行sql后是否正确,0正确
            fetch next from order_cursor into @temp   --转到下一个游标,没有会死循环
        end    
    close order_cursor  --关闭游标
    deallocate order_cursor   --释放游标
end
go
--查看结果--
select * from Student

2)执行后的查询结果

技术分享

4、游标循环(事务)

1)根据实际循环学生表信息

---游标循环遍历--
begin
    declare @a int,@error int    
    declare @temp varchar(50)
    set @a=1
    set @error=0
    begin tran  --申明事务
    --申明游标为Uid
    declare order_cursor cursor 
    for (select [Uid] from Student)
    --打开游标--
    open order_cursor
    --开始循环游标变量--
    fetch next from order_cursor into @temp
    while @@FETCH_STATUS = 0    --返回被 FETCH语句执行的最后游标的状态--
        begin            
            update Student set [email protected],[email protected] where [email protected]
            set @[email protected]+1
            set @error= @error + @@ERROR   --记录每次运行sql后是否正确,0正确
            fetch next from order_cursor into @temp   --转到下一个游标
        end    
    if @error=0
    begin
        commit tran   --提交事务
    end
    else
    begin
        rollback tran --回滚事务
    end
    close order_cursor  --关闭游标
    deallocate order_cursor   --释放游标
end
go
--查看结果--
select * from Student

2)执行后的查询结果:

技术分享

 

以上是关于SQL SERVER循环遍历(普通循环和游标循环)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle动态游标实现动态SQL循环遍历,和静态游标的比较。

sql 游标 循环

SQL游标怎么循环更新

SQL 中将游标循环查询的结果插入到临时表中

SQL Server循环和游标[关闭]

sql server游标循环