Хранение переменных из запросов в хранимых процедурах - PullRequest
0 голосов
/ 30 июня 2010

У меня есть хранимая процедура с параметром имени пользователя.Я хочу использовать один запрос для получения идентификатора пользователя, а затем использовать эту переменную в дальнейших запросах.

Вот что я имею до сих пор.Он компилируется нормально, но при исполнении я получаю ошибку «Ошибка преобразования типа данных varchar в uniqueidentifier.»

ALTER PROCEDURE [dbo].[sp_User_delete]
    @username uniqueidentifier
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @UserId uniqueidentifier;

    -- I guess I need to do something here to convert the ID
    SET @UserId = 
        (SELECT UserId FROM aspnet_Users WHERE UserName=@username);

    SELECT * FROM dbo.aspnet_UsersInRoles WHERE UserId=@UserId;
END

Ответы [ 4 ]

4 голосов
/ 30 июня 2010

Это просто сходит с ума, но действительно ли столбец UserName является уникальным идентификатором?Кажется, что обычно это varchar, поэтому проблема может быть в типе вашего параметра @username ... возможно, это также должен быть varchar.

4 голосов
/ 30 июня 2010
-- Proper way to set a variable, will only work properly if one row is returned
SELECT @UserId = UserId 
FROM aspnet_Users 
WHERE UserName = @username

Кроме того, если UserId в таблице aspnet_Users не является UniqueIdentifier, вы получите ошибку, которую вы описали в своем сообщении.

ОБНОВЛЕНИЕ

Послеперепроверив код OP, я понял, что ошибка не в присвоении переменной, а в предложении WHERE.

Поле UserName в таблице aspnet_Users, вероятно, VARCHAR, а параметр @username для SP - uniqueidentifier..

Попробуйте изменить @username на varchar и посмотрите, работает ли оператор.

1 голос
/ 30 июня 2010

Вы уверены, что тип данных aspnet_Users.UserId uniqueidentifier?

Ваш запрос может быть упрощен до:

SELECT * 
  FROM dbo.aspnet_UsersInRoles uir
  JOIN aspnet_Users au ON au.userid = uir.userid
 WHERE au.UserName = @username

Нет необходимости передавать переменную.

1 голос
/ 30 июня 2010

Что такое тип данных UserId в aspnet_users?

Вы можете объединить ваш SET / SELECT в одну инструкцию следующим образом:

SELECT @UserId = UserId FROM aspnet_Users WHERE UserName = @username;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...