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

我知道表中的值为空,并且我可以看到 @test 已正确设置为该值,因为第一个 SELECT 显示:

 |test
1|NULL

但是,在 IF 条件下,变量不会被视为 NULL,因为仅返回第三个 SELECT,显示:

 |(no column name)
1| 2

这是为什么?

4

3 回答 3

5

你需要使用IS NULL不是 = NULL

if @test IS NULL
    SELECT 1

else 
    SELECT 2

永远无法NULL与“常规”比较运算符进行比较 - 您始终必须使用IS 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 回答