2010-10-15 8 views
6

Cette procédure stockée ne fonctionne pas. J'ai vérifié le SQL et il renvoie la valeur correcte lorsqu'il est analysé directement à la base de données. C'est vraiment étrange! Il retourne juste 0 lignes.procédure stockée ne renvoie rien

Qu'est-ce qui pourrait ne pas fonctionner?

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 Comment l'appelez-vous? – rerun

+0

D'où je l'écris dans Visual studio. Je fais un clic droit et choisis Execute. – Phil

+0

Comment déterminez-vous la valeur de retour? –

Répondre

6
@eMail nvarchar 

tronque le passé dans le courrier électronique à un caractère. Vous devez mettre dans une longueur. par exemple.

@eMail nvarchar(50) 

Cela devrait correspondre au type de données de la colonne correspondante dans UserSet

Aussi avez-vous vraiment être en utilisant le code de retour pour cette ou voulez-vous utiliser un output parameter peut-être - ou juste un scalaire sélectionnez ?

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 

Et pour appeler

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

Oh aussi simple que cela? Merci, j'ai de la chance d'y être tombé si tôt dans le projet. – Phil

+0

Et pour répondre à votre question; il est correct que je cherchais le paramètre de sortie. Est-il préférable de toujours avoir un paramètre de sortie même si la commande est assez simple? – Phil

+0

@Phil - Oui. Je crois qu'un paramètre 'OUTPUT' est plus léger qu'un scalaire. –

1

Vous n'avez pas besoin d'affecter la salt à une variable.

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

Comme il semble, je ne peux pas retourner un var car il doit être un nombre entier? Cela s'applique-t-il uniquement à la commande "RETURN"? – Phil

+0

Il retournera 'salt' dans n'importe quel type de données. Vous pouvez lancer ça comme tout ce que vous voulez, avec une portée évidemment. 'CAST (sel AS nvarchar (50)) AS sel' –

1

Deux cents de ma fin

  • Bon vous utilisez SET NOCOUNT ON
  • Utilisez toujours RETURN pour retourner le code d'état, Exemple 0- succès, 1 - échec
  • Utilisez SELECT pour retourner les RANGS
  • Utiliser Essayer Capturer pour gérer les conditions d'erreur
Questions connexes