2010-01-26 60 views
0

我有一個存儲過程是這樣的:問題在存儲過程結果

ALTER PROCEDURE [dbo].[CheckUser&Pass] 
(
    @Username nchar(15), 
    @Password nchar(15) 
) 
AS 
    SET NOCOUNT ON; 
SELECT  Username, Pass, Code_Person 
FROM   Login 
WHERE  (Username = @Username) AND (Pass = @Password) 

和執行:

DECLARE @return_value int 

EXEC @return_value = [dbo].[CheckUser&Pass] 
     @Username = N'admin', 
     @Password = N'1234' 

SELECT 'Return Value' = @return_value 

GO 

我想知道我怎麼可以設置@return_Value爲1時,用戶名是admin密碼是1234.

但它不能正常工作,這是可能的嗎?

回答

5

要在存儲過程中設置的返回值,你需要使用RETURN聲明

例如

IF (@@ROWCOUNT > 0 AND @Username = 'admin' and password='1234') 
    RETURN 1 
ELSE 
    RETURN 0 

請注意,我已經給出了您剛剛要求的所有內容,只是爲了演示如何使用RETURN語句。還有一些需要關注的我都應該指出:

  1. 你看上去採用明文存儲的密碼,如果是這樣的話,是一個壞主意
  2. 的管理員用戶名這一硬編碼條件,密碼組合太可怕了。一個更好的解決方案是在db中有一個「IsAdmin」標誌 - 如果提供的用戶名/密碼有效,那麼如果該標誌指示該帳戶是管理員,則返回1。
  3. 使用nchar - 所有用戶名和密碼將被填充爲15個字符。你應該考慮nvarchar。
+0

就像我說的值存儲過程,必須有一個更好的辦法:) +1 – 2010-01-26 09:01:23

+0

是的,非常感謝它的工作原理 – kamiar3001 2010-01-26 09:24:10

1

你可以改變你的存儲過程返回計數,假設用戶名和密碼是唯一的,你應該得到1或0的結果,但我認爲必須有更好的方法。

ALTER PROCEDURE [dbo].[CheckUser&Pass] 
(
    @Username nchar(15), 
    @Password nchar(15) 
) 
AS 
    SET NOCOUNT ON; 
SELECT  Count(Username) 
FROM   Login 
WHERE  (Username = @Username) AND (Pass = @Password) 
0

你應該改變,以返回你想要

ALTER PROCEDURE [dbo].[CheckUser&Pass] 
(
    @Username nchar(15), 
    @Password nchar(15) 
) 
AS 
    SET NOCOUNT ON; 
    DECLARE @cnt INT 
    SELECT  @cnt = COUNT(*) 
    FROM   Login 
    WHERE  (Username = @Username) AND (Pass = @Password) 

    RETURN @cnt