2014-12-04 32 views
0

我在每週運行的存儲過程中有查詢。結果集每個月有4列。 (即7月:JulInvTotal,JulRPct,JulSPct,JulCPct)所以我的表中有48列,加上CurrentMonth。我只希望存儲過程在一個月內更新4列,當它是那個月的時候。在存儲過程中,如何僅更新表中的某些列,具體取決於它是哪個月

例如,在5月期間,除MayInvTotal,MayRPct,MaySPct,MayCPct之外,查詢結果集中的所有列都將爲零。所以我只想更新表格中的可能列。接下來的一個月,查詢將返回零到六月的列。我會更新六月列,但不是五月列,以便保留表格中上個月的數據。

最終,這個表格將會保存每月月末庫存的每月快照。

有沒有辦法使用case語句更新像我在下面嘗試?

CASE WHEN CurrentMonth=5 THEN 
UPDATE MonthlyInventorySnapshot 
SET 
MayInvTotal = MayInvTotal 
, MayRPct = MayRPct 
, MaySPct = MaySPct 
, MayCPct = MayCPct 

CASE WHEN CurrentMonth=6 THEN 
UPDATE MonthlyInventorySnapshot 
SET 
JunInvTotal = JunInvTotal 
, JunRPct = JunRPct 
, JunSPct = JunSPct 
, JunCPct = JunCPct 

非常感謝您的時間。如果您需要更多信息,請與我們聯繫。

+3

僅供參考這是一個糟糕的設計......這將使一個很有意義的在一個像'MonthKey,InvTotal,RPct,SPct,Cpct列' – JNK 2014-12-04 18:56:23

回答

0

使用if statement代替case

IF CurrentMonth=5 
UPDATE MonthlyInventorySnapshot 
SET 
MayInvTotal = MayInvTotal 
, MayRPct = MayRPct 
, MaySPct = MaySPct 
, MayCPct = MayCPct 

If CurrentMonth=6 
UPDATE MonthlyInventorySnapshot 
SET 
JunInvTotal = JunInvTotal 
, JunRPct = JunRPct 
, JunSPct = JunSPct 
, JunCPct = JunCPct 
0

一種選擇是使用case聲明每組聲明:

update MonthlyInventorySnapshot 
set MayInvTotal = case when @currentmonth = 5 then @MayInvTotal else MayInvTotal end, 
    MayRPct = case when @currentmonth = 5 then @MayRPct else MayRPct end, 
    ..., 
    JunInvTotal = case when @currentmonth = 6 then @JunInvTotal else JunInvTotal end, 
    JunRPct = case when @currentmonth = 6 then @JunRPct else JunRPct end, 
    ... 

這裏的想法是更新值在傳遞參數如果當前月份滿足,否則更新它自己。

相關問題