我有一个表格,作为存储过程的参数传入(它来自于Excel工作簿源,但那是另一个故事)。其中有几列需要将值与每列的有效值列表进行验证。
假设我的表格OriginDetails
看起来像这样(请注意,这仅是模拟数据; 我有两个这样的表格,每个表格有8列需要验证) -
Origin | Status | Priority | ErrMsg
------------------------------------------
Testing | In Review | Low |
Design | Initiated | Medium |
Prod | Declined | Critical |
我正在验证列 Origin
、Status
和 Priority
中的值,针对三个不同的列表进行验证(实际上我是根据表中的数据进行验证的,但为了简单起见,在此处我硬编码了这些值),并根据我的验证更新 ErrMsg
列 -
UPDATE OriginDetails
SET ErrMsg = ErrMsg + '|Invalid Origin'
WHERE Origin NOT IN ('Pre-Design','Design','Development')
UPDATE OriginDetails
SET ErrMsg = ErrMsg + '|Unrecognized Status'
WHERE Status NOT IN ('In Review','Approved')
UPDATE OriginDetails
SET ErrMsg = ErrMsg + '|Priority check failed'
WHERE Priority NOT IN ('Critical','Medium','High')
这一切都很好,运作良好 - 但是我最终得到了16个这样的更新语句,用于两个表格,因此我有一个非常庞大且难看的代码块(而且由于我几乎为2个表格编写了几乎相同的代码,所以还存在很多重复)。
是否有一种方法可以实际上在每个表格中执行所有更新的单个语句?
类似以下内容的东西,除了它应该执行每个条件而不仅仅是一个 -
UPDATE OriginDetails
SET ErrMsg = ErrMsg +
(CASE WHEN Origin NOT IN ('Pre-Design','Design','Development')
THEN '|Invalid Origin'
WHEN Status NOT IN ('In Review','Approved')
THEN '|Unrecognized Status'
WHEN Priority NOT IN ('Critical','Medium','High')
THEN '|Priority check failed'
END)
欢迎提出任何想法或意见。谢谢!