2010-10-15 76 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你叫它 – rerun 2010-10-15 23:01:55

+0

從哪裏我寫在Visual Studio中。我右鍵單擊並選擇執行。 – Phil 2010-10-15 23:03:20

+0

你如何確定回報價值? – 2010-10-15 23:07:09

回答

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 2010-10-15 23:13:05

+0

並回答你的問題;我正在查找輸出參數是正確的。即使命令非常簡單,總是有輸出參數是否更好? – Phil 2010-10-15 23:17:16

+0

@Phil - 是的。我相信'OUTPUT'參數比標量選擇更輕。 – 2010-10-15 23:18:42

1

你不需要到salt分配給一個變量。故障

  • 使用SELECT來 -

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

    看來,我不能返回一個變種,因爲它必須是一個整數?這隻適用於「返回」命令嗎? – Phil 2010-10-15 23:14:27

    +0

    它將以任何數據類型返回'salt'。你可以把它當作你想要的任何東西,而且範圍很明顯。 CAST(鹽AS nvarchar(50))AS鹽 – 2010-10-15 23:16:55

    1

    二是從我的最終

    • 好你正在使用SET NOCOUNT ON
    • 始終使用RETURN返回狀態代碼,例0-成功,1毛錢返回ROWS
    • 使用Try Catch處理錯誤條件