ストアドプロシージャにテーブルタイプパラメータとして受け取るテーブルがあります(Excelブックのソースから取得されますが、それは別の話です)。各列の有効な値のリストに対して値を検証する必要があるいくつかの列があります。
私のテーブルが次のOriginDetails
ようになっているとしましょう(これは単なるモックデータであることに注意してください。検証する8列ごとに2つのテーブルがあります)-
Origin | Status | Priority | ErrMsg
------------------------------------------
Testing | In Review | Low |
Design | Initiated | Medium |
Prod | Declined | Critical |
そして、私は列の値を検証し、Origin
3つの異なるリストに対して検証しています(実際にはテーブルのデータに対して値を検証していますが、簡単にするためにここでこれらの値をハードコーディングしました)、検証に基づいて列を更新します-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')
これはすべてうまく機能し、うまく機能します-しかし、2つのテーブルに対して16のそのような更新ステートメントが一緒になってしまうので、非常に大きくて醜いコードのブロックがあります(そして、2つのコードがほぼ同じであるため、多くの重複がありますテーブル)。
テーブルごとに1つのステートメントですべての更新を実際に実行できる方法はありますか?
以下のようなものですが、1つだけではなく各条件を実行する必要があります-
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)
任意のアイデア/方向性をいただければ幸いです。ありがとう。