台灣最大程式設計社群網站
線上人數
1427
 
會員總數:246228
討論主題:189787
歡迎您免費加入會員
討論區列表 >> MS SQL >> SQL 迴圈問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
SQL 迴圈問題
價值 : 5 QP  點閱數:890 回應數:4
樓主

dragon
門外漢
0 2
47 2
發送站內信

DECLARE @i int , @J int
SET @i=7
set @J=0
WHILE (@i >= 0)
BEGIN
Update INVENTORYBOOK
SET
STKLEND1=BALANCE,
BALANCE=INITIAL+STKPRHS0-STKPRHS1-STKSALE0+STKSALE1+STKALLT1-STKALLT2+STKBROW0-STKBROW1+STKADST,
@J=INITIAL+STKPRHS0-STKPRHS1-STKSALE0+STKSALE1+STKALLT1-STKALLT2+STKBROW0-STKBROW1+STKADST
WHERE
INVENTORYBOOK.SDATE = CONVERT(VARCHAR(10), GETDATE()-@i , 111) AND
INVENTORYBOOK.GWN='0000'
AND PROD='20401722'

Update INVENTORYBOOK
SET INITIAL=@J

WHERE
INVENTORYBOOK.SDATE = CONVERT(VARCHAR(10), GETDATE()-@i+1 , 111) AND
INVENTORYBOOK.GWN='0000'
AND PROD='20401722'

SET @J=0
SET @i = @i -1

END

請問上述程式 將料號條件 拿掉
則 @J 會變為0 該如何讓每個料號 都能寫入隔天的@J 裡面

搜尋相關Tags的文章: [ 迴圈 ] ,
本篇文章發表於2015-11-04 15:49
1樓
不懂這位啥要用迴圈

隔天你自已也寫了 getdate()+1

因為隔天還沒到 所以應該要insert吧!
本篇文章回覆於2015-11-04 17:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

dragon
檢舉此回應
因為要重算7天內的庫存
所以要用迴圈
測試一個料號的資料 是正常

如果要跑所有料號 7天內的資料就會錯誤
本篇文章回覆於2015-11-04 18:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
建議你把要update的資料來源先塞到暫存資料表

selet BALANCE,INITIAL+STKPRHS0-STKPRHS1-STKSALE0+STKSALE1+STKALLT1-STKALLT2+STKBROW0-STKBROW1+STKADST,
INITIAL+STKPRHS0-STKPRHS1-STKSALE0+STKSALE1+STKALLT1-STKALLT2+STKBROW0-STKBROW1+STKADST
into #temp from INVENTORYBOOK
WHERE
INVENTORYBOOK.SDATE = CONVERT(VARCHAR(10), GETDATE()-@i , 111) AND
INVENTORYBOOK.GWN='0000'
AND PROD='20401722'

然後看看對不對
在join回去 update
本篇文章回覆於2015-11-04 20:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

Hsu,Harry
檢舉此回應

整理SQL,將料號條件時,根本無法確認異動資料,建議可使用:
1. OUTPUT子句
異動後會將異動資料傳回,再與次段JOIN。
https://msdn.microsoft.com/zh-tw/library/ms177564%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396
2. 一組SQL (以WITH遞迴運算)

不過由指令中,已確知不會有跳日的問題? 因為都是+1 (次日)。
本篇文章回覆於2015-11-04 21:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.