SQL 检查变量中的空值

SQL Check for null values in variables

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

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

这可以使用 switchif 来完成,但是正在寻找更优雅的方法来做到这一点。

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

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

您可以将两者与 NULL 进行比较:

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

ISNULL怎么样?

Replaces NULL with the specified replacement value.

类似

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

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

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

如果您只想要 null 行,如果 @test 为空,您可以使用 NULLIF and ISNULL:

的组合
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