zoukankan      html  css  js  c++  java
  • 批量update代替游标

    今天写了一个SQL,觉得挺牛逼的,被人一句话 毙了

     DECLARE @ProductId INT , @ProductCount INT  
                --提仓调整冻结库存
                IF @Adjusttype=1
                BEGIN
                    DECLARE orderDetail_CURSOR CURSOR FOR
                    SELECT ProductId,ProductCount FROM dbo.OrderDetail WITH(NOLOCK) WHERE OrderID=     @OrderID
                    OPEN orderDetail_CURSOR
                    FETCH NEXT FROM orderDetail_CURSOR INTO @ProductId,@ProductCount
                    WHILE @@FETCH_STATUS = 0 
                        BEGIN
                            --改商品冻结库存 (原订单仓库)
                            UPDATE  dbo.InventoryForEdit
                            SET     FrozenStock = FrozenStock - @ProductCount
                            WHERE   ItemId = @ProductId
                            AND ItemType = 1 and WarehouseId = @OriginalWarehouseID
    
                            --改商品冻结库存 (换选仓后的仓库)
                            UPDATE  dbo.InventoryForEdit
                            SET     FrozenStock = FrozenStock + @ProductCount
                            WHERE   ItemId = @ProductId
                            AND ItemType = 1 and WarehouseId = @WarehouseId
                            
                            FETCH NEXT FROM orderDetail_CURSOR INTO @ProductId,@ProductCount
                        END
                    CLOSE orderDetail_CURSOR
                    DEALLOCATE orderDetail_CURSOR
                END
                ELSE --提仓失败 回滚数据
                BEGIN
                    DECLARE orderDetail_CURSOR CURSOR FOR
                    SELECT ProductId,ProductCount FROM dbo.OrderDetail WITH(NOLOCK) WHERE OrderID=@OrderID
                    OPEN orderDetail_CURSOR
                    FETCH NEXT FROM orderDetail_CURSOR INTO @ProductId,@ProductCount
                    WHILE @@FETCH_STATUS = 0 
                        BEGIN
                            --改商品冻结库存 (原订单仓库)
                            UPDATE  dbo.InventoryForEdit
                            SET     FrozenStock = FrozenStock + @ProductCount
                            WHERE   ItemId = @ProductId
                            AND ItemType = 1 and WarehouseId = @OriginalWarehouseID
    
                            --改商品冻结库存 (换选仓后的仓库)
                            UPDATE  dbo.InventoryForEdit
                            SET     FrozenStock = FrozenStock - @ProductCount
                            WHERE   ItemId = @ProductId
                            AND ItemType = 1 and WarehouseId = @WarehouseId
                            
                            FETCH NEXT FROM orderDetail_CURSOR INTO @ProductId,@ProductCount
                        END
                    CLOSE orderDetail_CURSOR
                    DEALLOCATE orderDetail_CURSOR
                END

    下面是更改后的SQL,而且参数,传的更少了。执行效率更高了,道行还是浅啊。

                    --改商品冻结库存 (原订单仓库)
                    UPDATE InventoryForEdit
                    SET 
                    InventoryForEdit.FrozenStock=InventoryForEdit.FrozenStock - O.ProductCount
                    FROM  OrderDetail AS O WITH(NOLOCK) 
                    WHERE InventoryForEdit.ItemId=O.ProductId AND InventoryForEdit.ItemType=O.ItemType AND InventoryForEdit.WarehouseId=@OriginalWarehouseID
                    AND O.OrderID=@OrderID
    
                      --改商品冻结库存 (换选仓后的仓库)
                    UPDATE InventoryForEdit
                    SET 
                    InventoryForEdit.FrozenStock=InventoryForEdit.FrozenStock +O.ProductCount
                    FROM  OrderDetail AS O WITH(NOLOCK) 
                    WHERE InventoryForEdit.ItemId=O.ProductId AND InventoryForEdit.ItemType=O.ItemType AND InventoryForEdit.WarehouseId=@WarehouseId
                    AND O.OrderID=@OrderID

    觉得自己很牛逼的SQL ,被老大一句话干掉了,应该问他怎么想到的

  • 相关阅读:
    简单的实现了利用plist进行大图分割小图
    windows 10升级后系统盘清理
    在window下用编译lua源文件生成lua程序
    window下ip切换
    springMVC对简单对象、Set、List、Map的数据绑定和常见问题.
    MIME类型大全
    Apache poi 固定Excel 表格导入数据库方法(列名对应数据库字段名)
    java 通过Apache poi导出excel代码demo实例
    mySQL 开启事件存储过程
    Mysql 变量讲解
  • 原文地址:https://www.cnblogs.com/q101301/p/4646706.html
Copyright © 2011-2022 走看看