更新特定字段時,有,涉及到這一領域
讓我覺得你真的想這樣做值:所以
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
,ResultType1 /如果b.Type條件不滿足,2將被設置爲它們的現有值,INSTEAD被設置爲NULL。
我假設,當你說「不完整的值集合」,你的意思是有些被設置爲NULL。
什麼是造成這種行爲的暗示ELSE NULL
CASE
表達式。
如果你真的想更新ResultType1
和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')
你的編輯後,如果值設置爲NULL,僅僅意味着b.value也是NULL。如果你不想這樣做,你可以在語句中添加一個where子句來過濾這些值。 'WHERE b.value IS NOT NULL' –
@Lieven:不僅僅是因爲如此。在'CASE'表達式中總是隱含的'ELSE NULL'會使許多字段設置爲'NULL',即使'b.value'中沒有Null' –
@Ypercube - 思考它,這是有道理的,但它是新的對我來說,謝謝。 –