Вы можете отказаться от использования хранимой процедуры и сделать это вместо:
UPDATE NewUsers
SET FirstName = (SELECT TOP 1 FirstName
FROM OldUsers WHERE UserId = @userId)
WHERE Id = @userId;
Обновление
Поскольку вы обновляете несколько столбцов, лучше использовать объединенное обновление:
update usr
set nus.Firstname = ous.FirstName,
nus.Lastname = ous.LastName
from NewUsers nus
inner join OldUsers ous
on nus.UserId = ous.UserId
where nus.UserId = @userId
Оригинальный выпуск
Несмотря на то, что предложения, приведенные здесь, решили вашу проблему, мы никогда не говорили вам, что не так с вашей хранимой процедурой. Ну, тебе это больше не нужно, но всегда есть время учиться! Вот исправленная версия (теперь устаревшей) хранимой процедуры:
ALTER PROCEDURE UpdateUserProfiles
@userId UNIQUEIDENTIFIER
AS
BEGIN
SET NOCOUNT ON;
declare @oldUser UNIQUEIDENTIFIER;
SET @oldUser = (SELECT TOP 1
FirstName
FROM OldUsers WHERE UserId = @userId);
UPDATE NewUsers
SET FirstName = @oldUser
WHERE Id = @userId;
END
GO
Вы пропустили декларацию @oldUser
. Кроме того, @oldUser
содержит только FirstName
, поэтому oldUser.FirstName
не имеет смысла.