我们有一个从对象构建 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/