Update with sub select - How to handle NULL values?
...aColumn = ISNULL( ( SELECT TOP 1 CASE WHEN bTable.someColumn = 1 THEN someValue1 WHEN bTable.someColumn = 2 THEN someValue2 ELSE someValue3 END FROM bTable WHERE bTable = @someCriteria ORDER BY someSortColumn ), aColumn)...
UPDATE A SET aColumn = B.Value FROM aTable AS A CROSS JOIN ( SELECT TOP 1 CASE WHEN bTable.someColumn = 1 THEN someValue1 WHEN bTable.someColumn = 2 THEN someValue2 ELSE someValue3 END FROM bTable WHERE bTable = @someCriteria ORDER BY someSortColumn ) AS B(Value)WHERE A.id = @someId;
Difference between my answer and answer by gbn is that here column aColumn
is not modified. I think that the isnull(..., aColumn)
actually updates the value so if you have an update trigger it will fire.
UPDATE aTableSET aColumn = s.ValueFROM ( SELECT TOP 1 CASE WHEN bTable.someColumn = 1 THEN someValue1 WHEN bTable.someColumn = 2 THEN someValue2 ELSE someValue3 END AS Value FROM bTable WHERE bTable = @someCriteria ORDER BY someSortColumn) sWHERE aTable.id = @someId AND s.Value IS NOT NULL;