2010-06-30 3 views
0

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

Вот что у меня есть. Он компилируется ОК, но при выполнении я получаю сообщение об ошибке «Ошибка преобразования типа данных 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 [email protected]); 

    SELECT * FROM dbo.aspnet_UsersInRoles WHERE [email protected]; 
END 
+0

Вы не можете просто преобразовать любую строку в уникальный идентификатор. похоже, что aspnet_Users.UserId - это просто такая строка. Команда T-SQL CONVERT может конвертировать элементы, но если UserId не является допустимым уникальным идентификатором, вы не можете многое сделать. Вам нужно переоценить то, что вы делаете, и внести туда некоторые изменения. –

ответ

4
-- 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 вы получите сообщение об ошибке, вы можете описать в Ваше сообщение.

UPDATE

После двойной проверки кода в OP, я понял, что ошибка не в присваивания значения переменной, то в ИНЕКЕ.

Поле UserName в таблице aspnet_Users, вероятно, VARCHAR, а параметр @username для SP - уникальный идентификатор.

Попробуйте изменить имя_пользователя на varchar и посмотреть, работает ли инструкция.

+0

Я пробовал это, но я все равно получаю то же сообщение. Поле 'UserId' из' aspnet_Users' определенно является 'uniqueidentifier'. – DisgruntledGoat

+0

@DisgruntledGoat - после двойной проверки кода ... вы передаете имя @us в качестве UniqueIdentifier. Я предполагаю, что поле UserName в таблице aspnet_Users является varchar (следовательно, ошибка). –

+0

Вы правы, это был параметр '@ username', вызывающий проблему. Спасибо за помощь и лучший синтаксис SP :) – DisgruntledGoat

1

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

Вы можете объединить SET/SELECT в одном операторе, кстати:

SELECT @UserId = UserId FROM aspnet_Users WHERE UserName = @username; 
1

Вы точно знаете, что тип данных aspnet_Users.UserId is uniqueidentifier?

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

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

Там нет необходимости для передачи переменной обработки.

4

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

Смежные вопросы