zoukankan      html  css  js  c++  java
  • sql游标及模仿游标操作

    游标用途:对一个查询出来的结果,每一行作为参数进行操作

    一:游标操作

    --申请一个游标
    DECLARE MyCursor CURSOR 
    FOR SELECT ID FROM dbo.tb_stock WHERE virtual_stock=0
    
    --打开游标
    OPEN MyCursor
    
    --移动游标接收里面的值
    DECLARE @id INT
    FETCH NEXT FROM MyCursor INTO @id 
    
    --@@FETCH_STATUS全局变量判断游标的状态 0:读取完成 -1:读取失败 -2:记录被删除
    WHILE @@FETCH_STATUS=0
    BEGIN
        --对得到数据进行操作
        UPDATE dbo.tb_stock SET virtual_stock=10 WHERE ID=@id
        --移动游标
        -- FETCH格式上除了NEXT还有PRIOR、FRIST、LAST。分别是上一行、第一行及最后一行。   
        FETCH NEXT FROM MyCursor INTO @id
    END

    --关闭游标
    CLOSE MyCursor
    --释放资源
    DEALLOCATE MyCursor

     

    二:用while循环操作

    go
    --数据分组放入临时表
    DECLARE @Count INT ,@id INT 
    --定义临时表接收数据
    CREATE TABLE #tempTable(id INT NOT NULL)
    --将原有数据加行row,顺序排序
    INSERT INTO #tempTable SELECT t.id FROM
    (SELECT ROW_NUMBER() OVER(ORDER BY goods_id DESC)id,goods_id , SUM(quantity) number FROM dbo.tb_stock GROUP BY goods_id ) as t
    
    --计算总计条数
    SET @Count=(SELECT COUNT(1) FROM #tempTable)
    --循环读取每一条数据
    WHILE @Count>0
    BEGIN
        --得到每一条数据进行处理
        SET @id=(SELECT * FROM #tempTable WHERE id=@Count)
        UPDATE dbo.tb_stock SET virtual_stock=15 WHERE ID=@id 
        --移动到下一条数据
        SET @Count=@Count-1
    END
  • 相关阅读:
    Hadoop 回收站
    Sparkstreaming reduceByKeyAndWindow(_+_, _-_, Duration, Duration) 的源码/原理解析
    spark streaming updateStateByKey 用法
    spark streaming 直连 kafka 分区
    sparkStreaming 练习
    json demo
    spark与flume整合
    spark sql 入门
    【面试】c++单例模式
    Python高级笔记(十一)装饰器【面试】
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/5853442.html
Copyright © 2011-2022 走看看