Почему этот оператор обновления не становится скомпилированным? Согласно MSDN это совершенно правильно.
UPDATE dbo.UserProperties
SET Value = MergeFrom.Value
FROM dbo.UserProperties MergeFrom ,
dbo.UserProperties MergeTo
WHERE MergeFrom.Field = MergeTo.Field
AND MergeTo.[Key] = CAST(@MergeToUserID AS NVARCHAR(50))
AND MergeFrom.[Key] = CAST(@MergeFromUserID AS NVARCHAR(50))
Думаю, вам нужно сослаться на Псевдоним в ОБНОВЛЕНИИ для самостоятельного СОЕДИНЕНИЯ. По крайней мере, я только что попробовал ОБНОВЛЕНИЕ с самостоятельным СОЕДИНЕНИЕМ, и у меня сработал следующий синтаксис.
UPDATE MergeTo
SET MergeTo.Value = MergeFrom.Value
FROM dbo.UserProperties AS MergeFrom INNER JOIN
dbo.UserProperties AS MergeTo ON MergeFrom.Field = MergeTo.Field
WHERE MergeTo.[Key] = CAST(@MergeToUserID AS NVARCHAR(50))
AND MergeFrom.[Key] = CAST(@MergeFromUserID AS NVARCHAR(50))