2010-10-15 1 views
6

Questa stored procedure non funziona. Ho controllato l'SQL e restituisce il valore corretto quando analizzato direttamente nel DB. È davvero strano! Restituisce solo 0 righe.non restituisce nulla

Cosa potrebbe esserci di sbagliato?

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 come lo chiami – rerun

+0

Da dove lo scrivo in Visual Studio. Faccio clic destro e scelgo Esegui. – Phil

+0

Come si determina il valore restituito? –

risposta

6
@eMail nvarchar 

troncherà il passato in e-mail a un carattere. Hai bisogno di mettere una lunghezza. per esempio.

@eMail nvarchar(50) 

Questo dovrebbe corrispondere al tipo di dati della colonna pertinente UserSet

Inoltre non si vuole veramente di utilizzare il codice di ritorno di questo o non si desidera utilizzare un output parameter forse - o solo uno scalare selezionare ?

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 

E chiamarlo

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

Oh che semplice? Grazie, sono stato fortunato ad averlo incontrato in questa fase iniziale del progetto. – Phil

+0

E per rispondere alla tua domanda; è corretto che stavo cercando il parametro di uscita. È meglio avere sempre un parametro di output anche se il comando è abbastanza semplice? – Phil

+0

@Phil - Sì. Credo che un parametro 'OUTPUT' sia più leggero di una selezione scalare. –

1

Non è necessario assegnare il salt a una variabile.

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

Come sembra, NON POSSO restituire una var dal momento che deve essere un numero intero? Questo si applica solo al comando "RETURN"? – Phil

+0

Restituirà 'salt' in qualunque tipo di dati sia. Potresti scriverlo come qualsiasi cosa tu voglia, con scope ovviamente. 'CAST (sale AS nvarchar (50)) come sale' –

1

due centesimi dal mio fine

  • Buono si utilizza SET NOCOUNT ON
  • Usare sempre RETURN per tornare codice di stato, esempio 0- successo, 1 - fallimento
  • Usa SELECT Riportare la RIGHE
  • Utilizzare Prova Cattura per gestire le condizioni di errore