sql - 在ms sql server中的where子句中替换FROM ISNULL

标签 sql sql-server isnull

我们在查询上使用了存储过程。我们的某些字段获得了 NULL 值,因此为了获得该值,我们将 ISNULL 的转换放入 WHERE 条件中,但每次检查都会影响 的进程>strodproc 基于 SQL 性能工具

例如

SELECT * FROM tblInfo
WHERE ISNULL(fldInfo,'') <> ''

表信息

fldinfo
NULL
30
NULL
20

查询

SELECT * FROM tblinfo WHERE fldinfo NOT IN (30,20) - different result
SELECT * FROM tblinfo WHERE ISNULL(fldinfo,'') NOT IN (30,20) - Correct

结果

我们可以使用任何其他脚本替换过程,以便我们可以获得值但不影响查询的性能。

最佳答案

您的方法将是不可控制的。即使您有索引,也不会使用它。

正确的方法是使用 IS NOT NULL 条件

SELECT * FROM tblInfo 
WHERE fldInfo <> '' 
  AND fldInfo IS NOT NULL

如果您没有索引,请在 fldinfo 上创建一个索引以提高性能

更新:

Not In 无法比较 NULL 值。与 NULL 值的比较未知,因此无法返回 NULL 值。这是执行此操作的正确方法

SELECT *
FROM   tblInfo
WHERE  (fldinfo NOT IN ( 30, 20 ) OR fldinfo IS NULL) 

关于sql - 在ms sql server中的where子句中替换FROM ISNULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44962160/

相关文章:

mysql - 如何将一列的值复制到同一行中的另一列?

sql - 在 Oracle 中创建 bool 属性?

MySQL Integer比较速度(= vs <>)

MySQL 避免求和运算的空值?

sql - 为什么 [table].[column] != null 不起作用?

php - mysql中 '-'和 '&'字符串的问题

c# - 如何在 C# 中将 DataAdapter 与 SqlTransaction 一起使用?

sql - 固定间隔内独特的随机时间生成

sql-server - SSAS 处理非链接数据

mysql - 如果参数值为空,则查询返回所有记录