2015-01-13 39 views
0

我有一個SQL服務器表,其中有2列,我想根據標記發送到存儲過程與新值,如下所示更新其值之一:查詢:如果條件在SQL服務器更新

UPDATE 
    table_Name 

SET 
    CASE 
     WHEN @flag = '1' THEN column_A += @new_value 
     WHEN @flag = '0' THEN column_B += @new_value 
    END AS Total 

WHERE 
    ID = @ID 

什麼是正確的SQL服務器代碼這麼做?

+1

你最好在兩個單獨的更新,但在一個事務中這樣做,否則做在一個聲明將導致在case語句和一些uninccesary更新。 –

+0

@ M.Ali感謝您的回覆!你能舉一個例子說明你的意思是一次交易嗎? –

回答

0

我以爲M.Ali的評論是正確的,所以我根據他的建議構建了這個建議。 我還假設狀態字段是「批准」或「拒絕」,如您所說的基於它是否填充。如果有在狀態字段的任何其他條件,offcourse你必須添加這些到你,語句

BEGIN TRANSACTION 

Update Payment 
set post_date = new_postdate_value 
account_num = new_account_num_value 
pay_am = new_pay_am_value 
pay_type = new_pay_type_value 
authoriz = new_authoriz_value 
where status is not null 

UPDATE Payment 
SET account_num = new_account_num_value 
WHERE status is null 

COMMIT TRANSACTION