1

我编写了以下存储过程:

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我的问题是为什么变量没有第一个选择语句中设置?

4

1 回答 1

5

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

做了:

IF @UserID IS NOT NULL 

下面的 SO 问题有一些关于原因的信息,所以我不会费心重新发布它(这基本上是因为 NULL 不是实际值):

不等于 <> != NULL 上的运算符

于 2012-09-14T08:38:49.260 回答