Хранимая процедура SQL - как получить строку и использовать ее в моей процедуре? - PullRequest
1 голос
/ 10 октября 2011

Я не совсем уверен, как сформулировать это, поэтому, пожалуйста, не забудьте попросить меня уточнить что-то, если это не ясно.Вот что я хочу сделать:

ALTER PROCEDURE UpdateUserProfiles
    @userId UNIQUEIDENTIFIER
AS
BEGIN
    SET NOCOUNT ON;

    SET oldUser = (SELECT TOP 1 
        FirstName
        FROM OldUsers WHERE UserId = @userId);

    UPDATE NewUsers
    SET FirstName = oldUser.FirstName
    WHERE Id = @userId;

END
GO

Теперь, очевидно, это не работает, но как мне использовать строку внутри моего SP?Спасибо.

Ответы [ 2 ]

3 голосов
/ 10 октября 2011

Вы можете отказаться от использования хранимой процедуры и сделать это вместо:

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 не имеет смысла.

2 голосов
/ 10 октября 2011

Вам это помогает?

UPDATE u
SET FirstName = o.FirstName 
FROM NewUsers U
JOIN 
OldUsers o on
o.Id = u.id
WHERE 
U.ID = @userId

Вот вариант сценария Adrians, который может обновлять все строки одновременно:

UPDATE u
SET FirstName = 
(select top 1 FirstName   
from OldUsers 
where UserId = u.UserId
)
FROM NewUsers u
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...