我正在尝试将表值与可能为null
的变量进行比较,但是因为我们无法将其等于null,因此无法比较。
declare @test varchar(33) -- This can or cannot be NULL;
select * from [dbo].[ViewsConfiguration] where PolicyId= 139 and EventName= @test
这可以使用switch
或if
完成,但需要更优雅的方式来执行此操作。
答案 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
行,则可以使用NULLIF
和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