gpt4 book ai didi

sql - 我可以在一条语句中多次迭代更新单个列吗?

转载 作者:行者123 更新时间:2023-12-04 15:43:51 27 4
gpt4 key购买 nike

我有一个表,我在存储过程中将其作为表类型参数接收(它来自 excel 工作簿源,但这是另一回事)。它有几列,我需要根据每列的有效值列表来验证这些值。

假设我的表 OriginDetails 看起来像这样(请注意这只是模拟数据;我有两个这样的表,每 8 列我将验证)-

Origin   | Status     | Priority | ErrMsg
------------------------------------------
Testing | In Review | Low |
Design | Initiated | Medium |
Prod | Declined | Critical |

并且,我正在针对三个不同的列表验证列 OriginStatusPriority 中的值(实际上我正在验证这些值针对表中的数据,但为了简单起见,我在这里对这些值进行了硬编码),并根据我的验证更新了 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)

任何想法/方向表示赞赏。谢谢。

最佳答案

像这样的东西应该工作得很好(并且只需要你输入一次值):

UPDATE OriginDetails
SET ErrMsg = ErrMsg +
CASE WHEN Origin NOT IN ('Pre-Design','Design','Development') THEN '|Invalid Origin' ELSE '' END
+ CASE WHEN Status NOT IN ('In Review','Approved') THEN '|Unrecognized Status' ELSE '' END
+ CASE WHEN Priority NOT IN ('Critical','Medium','High') THEN '|Priority check' ELSE '' END

这里是 SQL Fiddle .

祝你好运。

关于sql - 我可以在一条语句中多次迭代更新单个列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14544925/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com