SQL检查变量中的空值

时间:2015-04-28 12:08:18

标签: sql-server null

我正在尝试将表值与可能为null的变量进行比较,但是因为我们无法将其等于null,因此无法比较。

declare @test varchar(33) -- This can or cannot be NULL;
select * from [dbo].[ViewsConfiguration] where PolicyId= 139 and EventName= @test

这可以使用switchif完成,但需要更优雅的方式来执行此操作。

5 个答案:

答案 0 :(得分:2)

您可以将它们与NULL进行比较:

DECLARE @test VARCHAR(33) 
SELECT  *
FROM    [dbo].[ViewsConfiguration]
WHERE   PolicyId = 139
        AND ( EventName = @testd
              OR ( EventName IS NULL
                   AND @testd IS NULL
                 )
            )

答案 1 :(得分:1)

ISNULL怎么样?

  

用指定的替换值替换NULL。

这样的东西
select * 
from [dbo].[ViewsConfiguration] 
where PolicyId= 139 
and EventName= ISNULL(@test,EventName)

答案 2 :(得分:1)

您可以使用ISNULL / COALESCE。您的查询就像

declare @test varchar(33) -- This can or cannot be NULL;
select * from [dbo].[ViewsConfiguration] where PolicyId= 139 and ISNULL(EventName,'')= ISNULL(@test,'')

答案 3 :(得分:0)

您可以使用is运算符明确检查:

SELECT * 
FROM   [dbo].[ViewsConfiguration] 
WHERE  PolicyId = 139 AND 
       (EventName = @test OR (@test IS NULL AND EventName IS NULL))

答案 4 :(得分:0)

如果null为空,如果您只想@test行,则可以使用NULLIFISNULL的组合:

SELECT * FROM [dbo].[ViewsConfiguration] WHERE PolicyId= 139 
     AND ISNULL(NULLIF(EventName, @test), NULLIF(@test, EventName)) IS NULL
如果值均为ISNULL(NULLIF(EventName, @test), NULLIF(@test, EventName))或者它们相等,则

null提供null:

EventName      @test        Result
----------------------------------
null           null         null   
[value]        null         [value]   
null           [value]      [value]  
[value1]       [value2]     [value1]  
[value]        [value]      null