sql-server - IN (NULL) 是否始终不返回任何行?

标签 sql-server t-sql

我们有一个从对象构建 T-SQL 查询的系统。如果尝试使用空列表作为 IN() 条件,该系统会故意抛出异常。

我正在考虑用 IN (NULL) 操作替换此行为。 根据我的尝试,这不会返回任何行,即使对于空值也是如此。

这对于我的情况来说是理想的行为。

但是在MS文档中,有这样的评论:

Any null values returned by subquery or expression that are compared to test_expression using IN or NOT IN return UNKNOWN. Using null values in together with IN or NOT IN can produce unexpected results.

可以使用 IN (NULL) 始终不返回任何行吗?这被认为是一种不好的做法吗?

最佳答案

[Column] IN (NULL) 相当于 [Column] = NULL

SET ANSI_NULLS ON的默认设置中,[Column] = NULL始终返回空结果集。

所以,只要你有兴趣

it returns no records even for values which are null [sic]

,它会起作用。

一个论点是,这是晦涩的代码,任何不了解这些知识的人(甚至可能是几个月后的您)都可能认为不返回 NULL 值行是“意外的”,并且可能会尝试“修复”它。

关于sql-server - IN (NULL) 是否始终不返回任何行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72855387/

相关文章:

sql - 如何在创建存储过程之前检查它是否存在

sql-server - 如何自动填充 SQL Server 列

xml - 如何使用 XQuery/T-SQL 解析包含嵌套默认命名空间的客户 xml

sql - 在单个 T-SQL 语句中多次返回时间戳

sql - 如何在同一个表中复制关系记录?

SQL Server : Count the number of times the ID from table A occurs in table B

sql-server - SQL Server 约束允许 "two unique"值

mysql - 如何使用where选择最旧或最新的日期?

SQL Server 按列对查询

sql - 存储过程中的可选参数 - CASE 与 OR