РЕДАКТИРОВАТЬ
Я хочу добавить причину, по которой ваше утверждение IF
не работает.Когда вы набираете EXISTS
для агрегата, оно всегда будет true
.Возвращает значение, даже если ID
не существует.Конечно, это NULL
, но его возвращают.Вместо этого сделайте следующее:
if exists(select 1 from table where id = 4)
, и вы попадете в часть ELSE
вашего оператора IF
.
Теперь, вот лучший, основанный на множествахрешение:
update b
set code = isnull(a.value, 123)
from #b b
left join (select id, max(value) from #a group by id) a
on b.id = a.id
where
b.id = yourid
Преимущество заключается в возможности запуска по всей таблице, а не по отдельным идентификаторам.