如何返回所有可能性,无论是内容还是NULL?
如果我想要返回所有不为空的内容:
SELECT * FROM table WHERE column LIKE '%'
如果我想返回所有NULL:
SELECT * FROM table WHERE column IS NULL
我如何将它们两者结合起来?我需要能够,因为我正在参数化它。我的应用程序的前端将有多个选项ALL(任何内容或NULL)或特定值。
我怎样才能做到这一点?
编辑:
让我更好地澄清一下。我有一个下拉列表,将显示这样的内容
- 选择全部 - A队 B队 ...
因此,如果选择-Select All-,那么我需要查询返回所有NULL和任何团队
如果选择了A队,我只需要显示A组而不显示NULL等等......
我无法将查询更改为单个变量(参数)
答案 0 :(得分:3)
WHERE column LIKE '%' OR column IS NULL
答案 1 :(得分:3)
假设NULL
为参数值意味着“全部”
WHERE Team = @Team OR @Team IS NULL
除非你在2008 + 和使用OPTION (RECOMPILE)
,否则这可以提供次优计划。
答案 2 :(得分:2)
这很简单。只获得NULLS:
SELECT * FROM table
WHERE column IS NULL
仅获取NOT NULLS:
SELECT * FROM table
WHERE column IS NOT NULL
-- could be this if your example is not representative
-- WHERE column IS NULL OR column LIKE '%whatever%'
对于一切(没有过滤器),只需:
SELECT * FROM table
进一步澄清:
在您的示例中,如果代码已经编写,并且您只能传入WHERE子句,那么您可以这样做:
WHERE <insert here>
column IS NULL -- just nulls
column = 'teamX' OR column IS NULL -- nulls or 'teamX'
column IS NOT NULL -- any value, but no nulls
1=1 -- for the case where you don't really want a WHERE clause. All records
听起来这不是构建代码的最佳方式,但如果您已经被无法更改的内容所限制,我想您必须这样做。
答案 3 :(得分:1)
如果我理解你的问题,那么这就是你要找的东西
SELECT *
FROM table
WHERE column LIKE '%' or column Is null
答案 4 :(得分:1)
select * from table
可以得到你想要的吗?
答案 5 :(得分:1)
也许您的意思是“参数可以传递或参数可以为NULL ”?
如果是这样,那么这样的事情应该可以解决问题
SELECT * FROM table WHERE param IS NULL OR column LIKE '%' + param '%'
同样,如果参数传递关键字'ALL'意味着“选择所有内容”,那么它将是
SELECT * FROM table WHERE param = 'All' OR column LIKE '%' + param '%'
答案 6 :(得分:0)
一个案例是不使用任何where子句。
否则你可以使用或条件
where (column is null or column like '%something%')
答案 7 :(得分:0)
尝试这样的事情:
SELECT * FROM table WHERE column LIKE '%'
Union
SELECT * FROM table WHERE column IS NULL
如果它们具有相同的列名和数字,它将结合两个查询,因为唯一的区别是where子句,它应该正常工作