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 ,被老大一句话干掉了,应该问他怎么想到的

  • 相关阅读:
    OpenCV在MFC图像控件内显示图像
    Android APK反编译具体解释(附图)
    Android下用Properties保存程序配置
    王灏:光音网络致力打造Wi-Fi大生态圈
    解决ccSvcHst.exe CPU占用超50%的问题,及其缘由
    配置管理工具比較
    应用程序无法正常启动0xc0150002 解决方式
    现有一些开源ESB总线的比較
    使用GridView自带分页的代码
    Hadoop 2.4.0新特性介绍
  • 原文地址:https://www.cnblogs.com/q101301/p/4646706.html
Copyright © 2011-2022 走看看