具有NULL值的TSQL参数不会进入IF条件

时间:2012-11-07 14:11:44

标签: sql-server-2008 tsql if-statement null

我有一个如下所示的查询:

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,我可以看到@test正确设置为该值,因为第一个SELECT显示:

 |test
1|NULL

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

 |(no column name)
1| 2

为什么?

3 个答案:

答案 0 :(得分:5)

您需要使用IS NULL = NULL

if @test IS NULL
    SELECT 1

else 
    SELECT 2

您可以从不NULL与“常规”比较运算符进行比较 - 始终必须使用IS NULLIS NOT NULL

NULL本身并不是 - 它是值的缺席 ...

答案 1 :(得分:1)

使用IS NULL。而不是:

if @test = NULL
    SELECT 1

else 
    SELECT 2

试试这个:

if @test IS NULL
    SELECT 1

else 
    SELECT 2

答案 2 :(得分: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)