2012-09-14 114 views
1

我写了下面的存储过程:为什么在这个select语句中没有设置变量?

ALTER PROCEDURE [dbo].[sp_Accounts_ValidateLogin] 
    @EmailAddress varchar(255), 
    @Password varchar(20) 
AS 
    DECLARE @UserID int 

    SELECT @UserID = UserID 
    FROM Accounts_Users 
    WHERE EmailAddress = @EmailAddress and Password = @Password 

    IF @UserID != NULL 
     RETURN @UserID 
    ELSE 
     RETURN -1 

当执行这个程序就说明,

No rows affected. 
(0 row(s) returned) 
@RETURN_VALUE = -1 

但每当我重写SELECT语句,

SELECT UserID 
FROM Accounts_Users 
WHERE EmailAddress = @EmailAddress and Password = @Password 

结果是:

UserID                                                               
--------------------------------------------------------------------------------------- 
3                                                                 
No rows affected. 
(1 row(s) returned) 
@RETURN_VALUE = -1 

我的问题是为什么变量@UserID没有设置里面的第一选择声明?

回答

5

!= NULL不会像您期望的那样工作。

让它:

IF @UserID IS NOT NULL 

下面的SO问题有一点点的信息,为什么,所以我不会打扰重新张贴它(这基本上是因为NULL不是实际值):

Not equal <> != operator on NULL

相关问题