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
  • 相关阅读:
    掌握 ActionResult
    EF 的 霸气配置
    MVC 3 数据验证 Model Validation 详解
    Entity Framework 插入数据 解决主键非自增问题
    线程池(C#)
    socket 基础学习
    oracle创建job方法
    C# 任意类型数据转JSON格式
    JDBC(连接数据库的四个主要步骤)
    oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)
  • 原文地址:https://www.cnblogs.com/zhuyapeng/p/5853442.html
Copyright © 2011-2022 走看看