码迷,mamicode.com
首页 > 数据库 > 详细

sql游标

时间:2017-07-06 18:36:22      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:读取   store   and   rand   释放   rom   tween   gis   sum   

记录下游标的使用,也可以在游标中嵌入循环,即双重循环,代码如下

 

declare @GName  varchar(50),@GcName varchar(50)--临时变量,用来保存游标值
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT GoodsName,GcName FROM dbo.Tc_RegInStore GROUP BY GoodsName,GcName) --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor INTO @GName,@GcName ; --读取第一行数据
WHILE @@FETCH_STATUS = 0
    BEGIN
    
SELECT @GName AS GoodName,@GcName AS BrandName, 
(select ISNULL(Sum(convert(bigint,RegEndCode)-convert(bigint,RegStartCode))+count(*),0) AS InNum FROM dbo.Tc_RegInStore  
WHERE GoodsName =@GName AND GcName=@GcName) AS InNum,
(SELECT  count(*) AS OutNum FROM TC_LogisticsCode t 
INNER JOIN dbo.Tc_RegOutStore b 
ON convert(bigint,t.FLgsBar) BETWEEN convert(bigint,b.RegStartCode) AND convert(bigint,b.RegEndCode)
WHERE  t.FGoodsName=@GName AND t.BrandName=@GcName) AS OutNum

        FETCH NEXT FROM My_Cursor INTO @GName,@GcName; --读取下一行数据
    END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标

  

游标中嵌入循环,如下:

 

技术分享
 DECLARE @i INT;
 DECLARE @FAntiQryID INT;
 DECLARE @FFAntiFakeCode VARCHAR(50)
--临时变量,用来保存游标值
 DECLARE My_Cursor CURSOR --定义游标
 FOR
    ( SELECT    FFAntiFakeCode
      FROM      dbo.temp0706
      WHERE     FSystime > 2017-06-26
                AND FsearchNum = 0
      GROUP BY  FFAntiFakeCode
    )
 --查出需要的集合放到游标中
 OPEN My_Cursor;
 --打开游标
 FETCH NEXT FROM My_Cursor INTO @FFAntiFakeCode;
 --读取第一行数据
 WHILE @@FETCH_STATUS = 0 
    BEGIN
        IF NOT OBJECT_ID(Tempdb..#B) IS NULL 
            DROP TABLE #B
        CREATE TABLE #B ( [FAntiQryID] INT )
        INSERT  #B
                SELECT  FAntiQryID
                FROM    dbo.temp0706
                WHERE   FFAntiFakeCode = @FFAntiFakeCode
                ORDER BY FSystime DESC 
        --SELECT * FROM #B
        
        SET @i = 0;
        --循环码的记录数
        WHILE EXISTS ( SELECT   FAntiQryID
                       FROM     #B ) 
            BEGIN
                SET ROWCOUNT 1
                SET @i = @i + 1
                SELECT  @FAntiQryID = FAntiQryID
                FROM    #B
                UPDATE  dbo.temp0706
                SET     FsearchNum = @i
                WHERE   FAntiQryID = @FAntiQryID  --按时间递增更新查询次数
                SET ROWCOUNT 0
                DELETE  FROM #B
                WHERE   FAntiQryID = @FAntiQryID
            END
        DROP TABLE #B
        
        FETCH NEXT FROM My_Cursor INTO @FFAntiFakeCode; --读取下一行数据
    END
 CLOSE My_Cursor;
 --关闭游标
 DEALLOCATE My_Cursor; --释放游标
View Code

 

sql游标

标签:读取   store   and   rand   释放   rom   tween   gis   sum   

原文地址:http://www.cnblogs.com/SmilePastaLi/p/7127044.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!