我在存储过程中收到了一个表作为表类型参数(它来自 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 个表,所以我有一个非常大而丑陋的代码块(还有很多重复,因为我有 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)
任何想法/方向表示赞赏。谢谢。