如何从条件中获取sql表列中的所有值?

时间:2013-09-16 12:24:16

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

  

我想选择所有列值而不管NULL值为列值

我的问题是,当我尝试使用IS NULL选择值时我得到了这样的记录,这也是NULL值为:(

declare @status varchar(50)=NULL
declare @path varchar(50)= 'India'

select 
*
from [vwMYDATA] 
where
Path like '%' + @path + '%' and
(Status = @status or @status IS NULL)

vwMYDATA

path    status
INDIA1  NULL  
INDIA2  close
INDIA3  open

如果我执行上述查询,我​​将获得状态列具有NULL值的所有记录

  

预期是否未指定状态值显示所有状态记录

path    status
INDIA1  NULL  
INDIA2  close
INDIA3  open

显示

path    status
INDIA1  NULL  

我将这两个参数传递给具有此选择状态的存储过程。

如果状态未作为输入

,请帮我过滤并显示所有记录

6 个答案:

答案 0 :(得分:1)

select 
*
from [vwMYDATA] 
where
Path like '%' + @path + '%' and
((@status IS NULL )OR (Status = @status or status IS NULL))

答案 1 :(得分:0)

如果您希望根据@status varchar是否为NULL进行不同的操作,则需要将WHERE子句更改为Case语句。

Select *
From [vwMYDATA]
Where
    Path Like Concat('%', @path, '%') And
    1 = (
        Case When @status Is Null Then 1
        When Status = @status Then 1
        Else 0
    )

这可能是效率低下且不符合要求的。为了提高性能,最好有一个基于NULL匹配的完全不同的查询,以便可以应用正确的索引。

答案 2 :(得分:0)

如果您乐意总是过滤掉状态为空的记录(您似乎是这样),那么这应该有效:

declare @status varchar(50)=NULL
declare @path varchar(50)= 'India'

select 
*
from [vwMYDATA] 
where
Path like '%' + @path + '%' and
(Status = @status or @status IS NULL)
AND Status IS NOT NULL

答案 3 :(得分:0)

尝试删除or @status IS NULL条件

select 
*
from [vwMYDATA] 
where
Path like '%' + @path + '%' and
(Status = @status)

答案 4 :(得分:0)

你需要改变你的状况,如下所示:

declare @status varchar(50)=NULL
declare @path varchar(50)= 'India'

select 
*
from [vwMYDATA] 
where
Path like '%' + @path + '%' and
(@status IS NULL OR Status = @status)

你只需要改变条件的位置,因为条件从第一个开始检查,所以现在如果@status为null,则查询不检查下一个条件。

答案 5 :(得分:0)

获取状态的NUll值记录 select * from vwMYDATA status is null

获取状态不是NUll值记录 select * from vwMYDATA status is not null