zoukankan      html  css  js  c++  java
  • SQLserver 中的循环遍历(普通循环和游标循环)

    1、普通循环执行SQL

    declare @i int       --声明
    set @i=1             --初始化
    while @i<=50         --执行条件
    begin 
    exec [dbo].[LineCalendar] @lineId= @i   --执行的SQL
    set @i=@i+1      --执行后变量加1
    end
    使用游标的顺序: 声名游标、打开游标、读取数据、关闭游标、删除游标。

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

    ---游标循环遍历--
    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
            --判断游标的状态
            --0 fetch语句成功    
            --1 fetch语句失败或此行不在结果集中    
            --2 被提取的行不存在
            while @@FETCH_STATUS = 0    --返回被 FETCH语句执行的最后游标的状态--
            begin            
                update Student set Age=15+@a,demo=@a where Uid=@temp
                set @a=@a+1
                set @error= @error + @@ERROR   --记录每次运行sql后是否正确,0正确
                fetch next from order_cursor into @temp   --转到下一个游标,没有会死循环
            end   
        close order_cursor  --关闭游标
        deallocate order_cursor   --释放游标
    end
    go

    3、游标循环(事务)

    ---游标循环遍历--
    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 Age=20+@a,demo=@a where Uid=@temp
                set @a=@a+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

    原文:https://www.cnblogs.com/xielong/p/5941595.html

  • 相关阅读:
    网络信息安全攻防学习平台第7题
    深入理解读写锁ReentrantReadWriteLock
    彻底理解ReentrantLock
    (三)应该了解关于并发相关的概念
    (二)并发编程的优缺点
    Linux Makefile多目录的编写
    libcurl 下载上传
    MFC枚举USB设备碰到的一个疑难,还没解决
    MFC一个令人纠心的错误
    如何为你的App获取用户的反馈和5星级评论
  • 原文地址:https://www.cnblogs.com/LinWenQiang/p/15625100.html
Copyright © 2011-2022 走看看