我想根据参数值获取行。它可能是值'ABC'或NULL。下面是我想要实现的源表和预期结果。
SourceTable
column1 column2
--------------------------
value1 NULL
value2 ABC
尝试使用查询,但它获得了两行,其值为value1和value2。
Declare @Param1 varchar(20) = 'ABC'
Select *
from SourceTable
where column2 = @Param1 Or column2 is NULL
如果值为'ABC',则结果 -
column1 column2
--------------------------
value2 ABC
如果值为NULL,则结果 -
column1 column2
--------------------------
value1 NULL
答案 0 :(得分:4)
也许这对你有用吗?
select *
from SourceTable
where column2 = @Param1 or (@Param1 is null and column2 is null)
答案 1 :(得分:1)
你可以尝试类似的方法:只有你的列2有空白时才会遇到这个问题。
SELECT *
FROM SourceTable
WHERE ISNULL(column2, '') = ISNULL(@Param1, '')
答案 2 :(得分:0)
也许你想要union all
并检查存在:
Select *
from SourceTable
where column2 = @Param1
union all
Select *
from SourceTable
where column2 is null and not exists (select 1 from sourcetable st2 where st2.column2 = @Param1);
替代方法使用order by - 如果您只想要一行:
select top 1 st.*
from sourcetable st
where column2 = @param1 or column2 is null
order by (case when column2 is not null then 1 else 2 end);