2010-10-15 22 views
6

Este procedimiento almacenado no funciona. Revisé el SQL y devuelve el valor correcto cuando se analiza directamente en el DB. ¡Es realmente extraño! Simplemente devuelve 0 filas.procedimiento almacenado no devuelve nada

¿Qué podría estar mal?

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 ¿Cómo lo llamas? – rerun

+0

Desde donde lo escribo en Visual Studio. Hago clic derecho y selecciono Ejecutar. – Phil

+0

¿Cómo está determinando el valor de retorno? –

Respuesta

6
@eMail nvarchar 

truncará la pasaron en el correo electrónico a un carácter. Necesitas poner un largo. p.ej.

@eMail nvarchar(50) 

Este debe coincidir con el tipo de datos de la columna correspondiente en UserSet

también lo que realmente quiere estar usando el código de retorno para este o quieres usar un output parameter quizás - o simplemente un escalar seleccione ?

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 

Y llamarlo

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

Oh, ¿así de simple? Gracias, tengo suerte de haber tocado eso desde el principio del proyecto. – Phil

+0

Y para responder a su pregunta; es correcto que estaba buscando el parámetro de salida. ¿Es una buena práctica tener siempre un parámetro de salida aunque el comando sea bastante simple? – Phil

+0

@Phil - Sí. Creo que un parámetro 'OUTPUT' es más liviano que una selección escalar. –

1

No es necesario asignar el salt a una variable.

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

Como parece, NO PUEDO devolver una var porque tiene que ser un número entero? ¿Esto solo se aplica al comando "DEVOLVER"? – Phil

+0

Devolverá 'sal' en cualquier tipo de datos que sea. Podrías lanzar eso como lo que quieras, obviamente con su alcance. 'CAST (sal AS nvarchar (50)) COMO sal' –

1

dos centavos de mi fin

  • Buena está utilizando SET NOCOUNT EN
  • utilizar siempre vuelven a regresar código de estado, Ejemplo 0- éxito, 1 - Fallo
  • SELECT para uso devolver las ROWS
  • Usar Intentar capturar para manejar las Condiciones de error
Cuestiones relacionadas