2010-10-15 3 views
6

Эта хранимая процедура не работает. Я проверил SQL и вернул правильное значение при анализе непосредственно в БД. Это действительно странно! Он просто возвращает 0 строк.хранимая процедура ничего не возвращает

Что может быть неправильным?

ALTER PROCEDURE dbo.GetSaltOfUser 

(
@eMail nvarchar 

) 

AS 
DECLARE @result nvarchar 
/* SET NOCOUNT ON */ 
BEGIN 
    SELECT @result = salt 
    FROM UserSet 
    WHERE eMail = @eMail 
    RETURN @result 
END 
+0

H ow вы называете это – rerun

+0

Откуда я пишу его в Visual studio. Я нажимаю правой кнопкой мыши и выбираю Execute. – Phil

+0

Как вы определяете возвращаемое значение? –

ответ

6
@eMail nvarchar 

усечет передаваемая по электронной почте одному символу. Вам нужно положить длину. например

@eMail nvarchar(50) 

Это должно соответствовать типу данных соответствующего столбца в UserSet

Также вы действительно хотите использовать код возврата для этого, или вы хотите использовать output parameter возможно - или просто скалярная выбрать ?

ALTER PROCEDURE dbo.GetSaltOfUser 

    (
    @eMail nvarchar (50),  /*Should match datatype of UserSet.eMail*/ 
    @salt nvarchar (50) OUTPUT /*Should match datatype of UserSet.salt*/ 
) 

AS 
BEGIN 
    SET NOCOUNT ON 

    SELECT @result = salt 
    FROM UserSet 
    WHERE eMail = @eMail 
END 

И называть это

DECLARE @salt nvarchar(50) 
EXECUTE dbo.GetSaltOfUser N'[email protected]', @salt OUTPUT 
SELECT @salt 
+0

О, это просто? Спасибо, мне повезло, что я натолкнулся на это на ранней стадии проекта. – Phil

+0

И ответить на ваш вопрос; правильно, что я искал выходной параметр. Лучше ли всегда иметь выходной параметр, даже если команда довольно проста? – Phil

+0

@Phil - Да. Я считаю, что параметр «OUTPUT» более легкий, чем скалярный. –

1

Вам не нужно назначить salt переменной.

CREATE PROCEDURE dbo.GetSaltOfUser 
(
    @eMail nvarchar  
) 
AS 
BEGIN 
    SELECT salt 
    FROM UserSet 
    WHERE eMail = @eMail 
END 
+0

Как мне кажется, я не могу вернуть var, так как он должен быть целым числом? Это относится только к команде «RETURN»? – Phil

+0

Он будет возвращать 'salt' в любом типе данных. Вы могли бы наложить это как на что угодно, очевидно. 'CAST (соль AS nvarchar (50)) AS salt' –

1

Два Cents от моего конца

  • Хорошо вы используете SET NOCOUNT ON
  • Всегда используйте RETURN для возврата кода состояния, пример 0- успех, 1 - отказ
  • Используйте SELECT, чтобы вернуть ROWS
  • Использовать Try Catch для обработки Условия ошибки
Смежные вопросы