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

私の質問は、最初のselectステートメント内で変数@UserID設定されないのはなぜですか?

4

1 に答える 1

5

!= NULL は期待どおりに機能しません。

成功する:

IF @UserID IS NOT NULL 

以下の SO の質問には、理由に関する情報がほとんどないため、再投稿する必要はありません (基本的に、NULL は実際の値ではないためです)。

等しくない <> != NULL の演算子

于 2012-09-14T08:38:49.260 に答える