• sql游标循环结果集


    我们知道游标是一种对结果集操作的神器,使用游标,可以很方便的循环结果集,并对结果集进行数据处理。

    1、建表

     1 CREATE TABLE [dbo].[Student](
     2     [Uid] [INT] IDENTITY(1,1) NOT NULL,
     3     [Name] [NCHAR](10) NULL,
     4     [BirthDay] [DATETIME] NULL,
     5     [Sex] [INT] NULL,
     6     [Age] [INT] NULL,
     7     [demo] [INT] NULL,
     8  CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED 
     9 (
    10     [Uid] ASC
    11 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    12 ) ON [PRIMARY]

    2、sql代码实例:

     1 BEGIN
     2     DECLARE @a INT ,
     3         @error INT;    
     4     DECLARE @temp VARCHAR(50);
     5     SET @a = 2;
     6     SET @error = 0;
     7 
     8    --定义一个游标
     9     DECLARE order_cursor CURSOR
    10    --申明游标为Uid
    11     FOR
    12         ( SELECT    [Uid]
    13           FROM      Student
    14         );
    15     --打开游标--
    16     OPEN order_cursor;
    17     --开始循环游标变量--
    18     FETCH NEXT FROM order_cursor INTO @temp;
    19     WHILE @@FETCH_STATUS = 0    --返回被 FETCH语句执行的最后游标的状态--
    20         BEGIN            
    21             UPDATE  Student
    22             SET     Age = 15 + @a ,
    23                     demo = @a
    24             WHERE   Uid = @temp;
    25             SET @a = @a + 1;
    26             SET @error = @error + @@ERROR;   --记录每次运行sql后是否正确,0正确
    27             FETCH NEXT FROM order_cursor INTO @temp;   --转到下一个游标,没有会死循环
    28         END;    
    29     CLOSE order_cursor;  --关闭游标
    30     DEALLOCATE order_cursor;   --释放游标
    31 END;
    32 GO
    33 

    查看表

     SELECT  * FROM    Student;

    结果如下

    3、实例2

    下面是循环插入数据的SQL实例。

     1 declare @orderN varchar(50)--临时变量,用来保存游标值
     2 declare y_curr cursor FOR --申明游标 为orderNum
     3 
     4 SELECT  FContractNo
     5 FROM    dbo.v_ContractInfo
     6 WHERE   FDate >= '2019-04-01 00:00:000'
     7         AND PayMode = 1
     8         AND Fstatus = 1
     9         AND FranchiseeNo IN ( '60005', '60007', '60011', '60036', '60070', '60097', '60146' )
    10         AND (WbStatus IS NULL OR WbStatus=0 ) AND FContractNo NOT IN (SELECT OrderNO FROM CF_BookingCheck )
    11 open y_curr --打开游标
    12 fetch next from Y_curr into @orderN ----开始循环游标变量
    13 while(@@fetch_status=0)---返回被 FETCH  语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
    14 
    15 BEGIN 
    16 PRINT(@orderN)
    17 INSERT INTO CF_BookingCheck (OrderNO,OverDays,WbStatus,FinanceType,WbChecker,WbCheckDate)VALUES (@orderN,0,3,0,'系统','2019-04-30 00:00:000')
    18 fetch next from y_curr into @orderN --开始循环游标变量
    19 END
    20 close y_curr--关闭游标
    21 deallocate y_curr --释放游标
  • 相关阅读:
    20145316《信息安全系统设计基础》第七周学习总结
    20145316 许心远《信息安全系统设计基础》第六周学习总结
    20145316 《信息安全系统设计基础》第五周学习总结
    20145316 《信息安全系统设计基础》第二周学习总结
    面试之关系型数据库
    面试之网络基础
    Java 并发
    Scrapy 组件的具体用法
    Scrapy 框架入门
    Spring Security 介绍与Demo
  • 原文地址:https://www.cnblogs.com/MirZhai/p/10250786.html
走看看 - 开发者的网上家园