首页 > 解决方案 > 如何在带有 where 子句的查询中返回 NULL 记录?

问题描述

我正在使用 SQL Server 2016,并且我为新手最终用户设置了视图。首先,假设有一个如下表:

id  number
=========
1   2
2   4
3   6
4   NULL
5   12

如果用户对视图进行查询,例如select * from view1 where number <> 12,则视图设置为使用以下命令返回 NULL 值 -99 coalesce(number,-99)

Result of 'select * from view1 where number <> 12':
id  number
=========
1   2
2   4
3   6
4   -99

无论如何让视图返回 NULL 而不是 -99 (或任何值),而最终用户不必包含... or where is null在他们的查询中?

我了解 NULL 以及它为什么会这样,但为了方便起见,我宁愿这些最终用户不必这样做。

标签: sqlsql-servertsql

解决方案


不。

您可以做的最好的事情是修复结果,使其解码-99NULL

SELECT id, CASE WHEN number = -99 THEN NULL ELSE number END AS number
FROM view1
WHERE number != 12

我认为这违背了不向最终用户公开价值的目的,或者通过作为有效数据NULL进行会计处理来处理数据,在这件事上使用。NULLOR number IS NULL


推荐阅读