そのフィールドに関連する値がある場合にのみ特定のフィールドを更新する
あなたが実際にこれをやりたいと私に思わせます:
UPDATE a
SET ResultType1 = CASE WHEN b.[Type] = 'type1'
THEN b.value
ELSE ResultType1
END
, ResultType2 = CASE WHEN b.[Type] = 'type2'
THEN b.value
ELSE ResultType2
END
FROM tableA AS a
INNER JOIN tableB AS b ON a.ID = b.ID
したがって、b.Type 条件が満たされない場合、ResultType1/2 は既存の値に設定されます。INSTEAD は NULL に設定されます。
「不完全な値のセット」と言うときは、一部が NULL に設定されていることを意味していると思います。
この動作の原因はELSE NULL
、CASE
式に含まれていることです。
ResultType1
実際に と null を更新したいResultType2
が、異なる の行のみを対象とする場合'type'
は、わずかに異なるクエリが実行されます。
UPDATE a
SET ResultType1 = CASE WHEN b.[Type] = 'type1'
THEN b.value
ELSE NULL --- this line can be removed
END
, ResultType2 = CASE WHEN b.[Type] = 'type2'
THEN b.value
ELSE NULL --- this one, too
END
FROM tableA AS a
INNER JOIN tableB AS b ON a.ID = b.ID
WHERE b.[Type] IN ('type1', 'type2')