• 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
  • 相关阅读:
    高质量动漫实时画质增强器Anime4K在mpv上的配置
    grep中正则表达式使用尖括号表示一个单词
    虚拟机复制的linux无法联网,解决Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization.
    Linux将动态IP改为静态IP
    回车、换行的区别
    栈的链接存储
    栈的顺序存储
    冒泡排序
    插入排序
    双向循环链表
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/5853442.html
Copyright © 2020-2023  润新知