基于SQL Server中的值的递归更新

时间:2016-03-15 07:04:55

标签: sql-server tsql stored-procedures

我有一个更新表的存储过程。使用每日作业调用此存储过程。

存储过程的逻辑如下:

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%]作业代码可能会替换为[%0-9%]个作业代码。因此,如果上述任何更新块失败,则存储过程会导致输出错误。我通过在每次更新之前添加此代码来处理此问题。

UPDATE Basetable 
SET amount = NULL

除此之外如何处理上述情况?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您可以尝试使用下面的case语句,

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

答案 1 :(得分: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