0

您如何返回所有可能性,无论是有内容还是 NULL?

如果我想返回非 NULL 的所有内容:

SELECT * FROM table WHERE column LIKE '%'

如果我想返回所有 NULL:

SELECT * FROM table WHERE column IS NULL

我如何将它们结合起来?我需要能够,因为我正在参数化它。我的应用程序的前端将有多个选项 ALL(任何内容或 NULL)或特定值。

我怎样才能做到这一点?

编辑:

让我更好地澄清一下。我有一个下拉列表会显示这样的事情

- 全选- A队 B队 ...

因此,如果选择了 -Select All-,那么我需要查询返回所有 NULL 以及任何 Team

如果选择了 Team A,我只需要显示 Team A 而没有 NULL,依此类推...

我不能只更改一个变量(参数)的查询

4

8 回答 8

3

假设NULL参数值表示“全部”

WHERE Team = @Team OR @Team IS NULL

除非您使用的是 2008+并且使用OPTION (RECOMPILE)它可以提供次优计划。

请参阅T-SQL 中的动态搜索条件

于 2013-09-25T15:23:29.523 回答
3
WHERE column LIKE '%' OR column IS NULL
于 2013-09-25T15:17:42.297 回答
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

听起来这不是构建代码的最佳方式,但是如果您已经受到无法更改的限制,我想您必须凑合着做。

于 2013-09-25T15:18:25.427 回答
1

也许您的意思是“参数可以传递或参数可以为 NULL ”?

如果是这样,那么这样的事情应该可以解决问题

SELECT * FROM table WHERE param IS NULL OR column LIKE '%' + param '%'

同样,如果参数传递的关键字“ALL”表示“选择所有内容”,它将是

SELECT * FROM table WHERE param = 'All' OR column LIKE '%' + param '%'
于 2013-09-25T15:23:14.357 回答
1

如果我理解你的问题,那么这就是你要找的

SELECT * 
FROM table 
WHERE column LIKE '%' or column Is null
于 2013-09-25T15:18:17.753 回答
1

select * from table能得到你想要的吗?

于 2013-09-25T15:18:18.890 回答
0

一种情况是不使用任何 where 子句。

否则你可以使用或条件

where (column is null or column like '%something%')
于 2013-09-25T15:18:09.203 回答
0

尝试这样的事情:

SELECT * FROM table WHERE column LIKE '%'
Union
SELECT * FROM table WHERE column IS NULL

如果它们具有相同的列名和编号,它将结合两个查询,因为唯一的区别是 where 子句,它应该可以工作

于 2013-09-25T15:30:57.730 回答