3

我知道比较运算符不适null用于 SQL 中的值,因此我们使用isnull,现在我遇到了这样一个表的情况,

ID      Name        Order
3   KnowledgeBase1  NULL
4   KnowledgeBase2  NULL
5   KnowledgeBase3  NULL
6   KnowledgeBase4  NULL
7   Child of first  1

现在在这里你可以看到Order可以是null或任何数值,

现在这里是选择查询

declare @order int = null

select 
        ID,
        Name,
        Order
from tbl
where Order = @order

@order当有任何查询时这个查询很好,numerals但是当它有时null它当然不起作用,因为 where 子句应该Order is null适用于这种情况,

所以问题是有没有办法exec() with a string of query在我的查询中不使用或条件语句来做到这一点?

4

2 回答 2

2

@order与where 子句中的比较NULL,如果是,则使用order IS NULLand ORthat 与您现有的条件一起使用,如果它有一个值:

select 
        ID,
        Name,
        Order
from tbl
where 
  Order = @order
  OR (@order IS NULL AND order IS NULL)

您尚未指定您的 RDBMS,但快速测试表明这与 MySQL 一起使用...

于 2012-07-21T11:25:57.557 回答
0

如果您将 isnull 与列名一起使用,则可以使用

声明@order int = ''

从 tbl 中选择 ID、名称、订单,其中 isnull(Order,'') = @order

于 2012-07-21T11:36:48.200 回答