根据参数从表中获取行

时间:2016-04-18 18:38:13

标签: sql sql-server sql-server-2008

我想根据参数值获取行。它可能是值'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  

3 个答案:

答案 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);