2016-03-15 20 views
1

我有一個更新表的存儲過程。這個存儲過程是使用日常工作來調用的。基於SQL Server中的值的遞歸更新

邏輯詮釋該存儲過程是如下:

Update Basetable 
Set amount = Isnull(actualamount, 0) 
From Acutaltable 
Where jobcode Like '[%A-Z%]' 

Update Basetable 
Set amount = amount + Isnull(actualamount, 0) 
From Acutaltable 
Where jobcode Like '[%0-9%]' 

jobcode列與動態值每天更新(即:[%A-Z%] jobcodes可以是取代[%0-9%] jobcodes)。因此,如果上述任何更新塊失敗,則存儲過程將導致錯誤的輸出。我通過在每次更新之前添加此代碼來處理此問題。

UPDATE Basetable 
SET amount = NULL 

除此之外如何處理上述情況?

感謝您的幫助。

回答

3

您可以嘗試的情況下,當語句像下面,

UPDATE Basetable 
SET amount = CASE 
     WHEN jobcode LIKE '[%A-Z%]' 
      THEN ISNULL(actualamount, 0) 
     WHEN jobcode LIKE '[%0-9%]' 
      THEN amount + Isnull(actualamount, 0) 
     ELSE NULL 
     END 
FROM Acutaltable 
+0

感謝的人。我沒有考慮過這種情況...... – bmsqldev

2
UPDATE Basetable 
SET amount = (CASE WHEN jobcode LIKE '[%A-Z%]' THEN 0 
WHEN jobcode LIKE '[%0-9%]'THEN amount END) + Isnull(actualamount,0) 
FROM Acutaltable