1

次のようなクエリがあります。

use [dbName]

DECLARE @profile_id int
SET @profile_id = 18
DECLARE @test int

SET @test = (SELECT user_profile_id FROM tbl_profiles WHERE id = @profile_id)

SELECT @test as test

if @test = NULL
    SELECT 1

else 
    SELECT 2

テーブルの値がnullであることを知っています。最初のSELECTが次のように表示されているため、@testがその値に正しく設定されていることがわかります。

 |test
1|NULL

ただし、IF条件では、3番目のSELECTのみが返されるため、変数はNULLとして扱われず、次のようになります。

 |(no column name)
1| 2

何故ですか?

4

3 に答える 3

5

使用する必要がありますIS NULLではなく = NULL

if @test IS NULL
    SELECT 1

else 
    SELECT 2

「通常の」比較演算子と比較することはできません。常に使用するか、またはのみを使用する必要があります。NULLIS NULLIS NOT NULL

そして、NULL実際にはそれ自体が価値ではありません-それは価値がないことです...

于 2012-11-07T14:13:21.517 に答える
1

を使用しIS NULLます。それ以外の:

if @test = NULL
    SELECT 1

else 
    SELECT 2

これを試して:

if @test IS NULL
    SELECT 1

else 
    SELECT 2
于 2012-11-07T14:13:48.643 に答える
0

条件を使用しないのはなぜですか (id = @profile_id AND @profile_id IS NOT NULL )

SELECT user_profile_id FROM tbl_profiles WHERE (id = @profile_id AND @profile_id IS NOT NULL)

于 2012-11-07T14:18:46.143 に答える