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
这可以使用 switch
或 if
来完成,但是正在寻找更优雅的方法来做到这一点。
您可以使用 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
我正在尝试将 table 值与可以是 null
的变量进行比较,但是由于我们不能将其等同于 null,因此无法进行比较。
declare @test varchar(33) -- This can or cannot be NULL;
select * from [dbo].[ViewsConfiguration] where PolicyId= 139 and EventName= @test
这可以使用 switch
或 if
来完成,但是正在寻找更优雅的方法来做到这一点。
您可以使用 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
或它们相等:
EventName @test Result
----------------------------------
null null null
[value] null [value]
null [value] [value]
[value1] [value2] [value1]
[value] [value] null