国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL Server 存儲過程之嵌套游標

2024-08-31 00:54:44
字體:
來源:轉載
供稿:網友
SQL Server 存儲過程之嵌套游標

下面是一個訂單取消的含2個游標的存儲過程

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER PROCEDURE [dbo].[CancelOrderBySystem]ASBEGINdeclare    /*聲明變量*/@Status varchar(100),  --狀態@TimeNow datetime,   --當前時間@TradeID varchar(50),  --訂單單號@GoodsID int,   --商品ID@Num int,   --數量@SkuID int  --規格IDset @Status='TRADE_CLOSED_BY_SYSTEM'   /*為變量賦值*/set @TimeNow=getdate() begin transaction; --開始執行事務--查詢所有已過期的訂單--對于已過期的訂單查詢其子訂單,判斷訂單是否有規格--如果沒有規格的需先判斷現在的是否有規格,有則不改總庫存--如果有規格的先判斷該規格釋放存在,存在才釋放規格庫存和總庫存--修改訂單的狀態declare cancelOrder_Cursor cursor for  --聲明游標select TradeID from WxTrade where  Status='WAIT_BUYER_PAY' and OutTime<=@TimeNow OPEN cancelOrder_Cursor    --打開游標FETCH NEXT FROM cancelOrder_Cursor    --獲取游標的下一行數據into @TradeID    --使變量獲得當前游標指定行的訂單單號 ----------------------外部游標(主訂單)begin --------------------------WHILE (@@FETCH_STATUS = 0)    --FETCH語句執行成功BEGIN  --修改訂單的狀態  update WxTrade set Status=@Status,CloseTime=@TimeNow where TradeID=@TradeID  --修改總庫存和規格庫存,對于已過期的訂單查詢其子訂單  declare orderDetail_Cursor cursor for  --聲明游標  select GoodsID,SkuID,Num from WxOrder where  TradeID=@TradeID  OPEN orderDetail_Cursor    --打開游標(子訂單)  FETCH NEXT FROM orderDetail_Cursor    --獲取游標的下一行數據  into @GoodsID,@SkuID,@Num   --使變量獲得當前游標指定行的商品ID,規格ID,數量  ----------------------內部嵌套游標(子訂單)begin ----------------------  ------------------------------------------------------------------------  WHILE (@@FETCH_STATUS = 0)    --FETCH語句執行成功  BEGIN    if(@SkuID is null)    BEGIN      --沒有規格的需先判斷現在的是否有規格,有則不改總庫存,沒有則改      if not exists(select SkuID from [Sku] where GoodsID=@GoodsID)      BEGIN       update Goods set Quantity=Quantity+@Num where GoodsID=@GoodsID      END          END     else    BEGIN      --如果有規格的先判斷該規格是否存在,存在才釋放規格庫存和總庫存      if exists(select SkuID from [Sku] where SkuID=@SkuID)      BEGIN       update [Sku] set ItemQuantity=ItemQuantity+@Num where SkuID=@SkuID       update Goods set Quantity=Quantity+@Num where GoodsID=@GoodsID      END     END    FETCH NEXT FROM orderDetail_Cursor     --獲取游標的下一行(子訂單)   into @GoodsID,@SkuID,@Num   --使變量獲得當前游標指定行的商品ID,規格ID,數量  END  CLOSE orderDetail_Cursor    --關閉游標(子訂單)  DEALLOCATE orderDetail_Cursor     --釋放游標(子訂單) ----------------------內部嵌套游標(子訂單)end ---------------------- ---------------------------------------------------------------------- FETCH NEXT FROM cancelOrder_Cursor     --獲取游標的下一行(主訂單) into @TradeID    --使變量獲得當前游標指定行的訂單單號EndCLOSE cancelOrder_Cursor    --關閉游標(主訂單)DEALLOCATE cancelOrder_Cursor    --釋放游標(主訂單) ----------------------外部游標(主訂單)end --------------------------if(@@error>0) begin    rollback transaction    return 0 endelse     begin    commit transaction    return 1 endEND

參考:http://blog.csdn.net/gxiangzi/article/details/6774786#0-qzone-1-7441-d020d2d2a4e8d1a374a433f596ad1440

http://blog.csdn.net/superhoy/article/details/7663542#0-qzone-1-15425-d020d2d2a4e8d1a374a433f596ad1440


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 城市| 武隆县| 湘阴县| 新龙县| 颍上县| 安岳县| 拉孜县| 磐安县| 西安市| 建瓯市| 南澳县| 铜鼓县| 新乡市| 龙海市| 滕州市| 宁化县| 长宁区| 永和县| 静宁县| 邢台县| 固安县| 华宁县| 金华市| 灵山县| 清涧县| 油尖旺区| 吉林市| 龙州县| 西吉县| 东城区| 保定市| 抚宁县| 西贡区| 梁平县| 南昌市| 牙克石市| 石渠县| 廉江市| 万源市| 那曲县| 南投市|