我们在查询
上使用了存储过程
。我们的某些字段获得了 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/