在 TSQL 中使用 ISNULL 的 Sargable 查询

Sargable queries using ISNULL in TSQL(在 TSQL 中使用 ISNULL 的 Sargable 查询)
本文介绍了在 TSQL 中使用 ISNULL 的 Sargable 查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望在我的查询中防止非 sargable 表达式,这是检查空条件的更好方法吗?

I'm looking to prevent non-sargable expressions in my queries, which is the better way to check for a null condition?

AND c.Account IS NOT NULL 
AND c.Account <> ''

AND ISNULL(c.Account,'') <> ''

<小时>

我突然意识到Account 来自LEFT JOIN,因此它可能为空.我想要它们只相交的情况,这意味着我真的应该只使用 INNER JOIN 吧?谢谢你的脸;)


It dawned on me to point out that Account is coming from a LEFT JOIN so it may be null. I want the cases where they only intersect, which means I should really just use an INNER JOIN huh? Thanks for the facepalms ;)

然而,忽略那令人作呕的自我实现,我仍然想知道在我不能将 Account 设为 NOT NULL 列的一般情况下的答案.

However, overlooking that nauseating self realization, I still want to know the answer to this in the general case where I can't make Account a NOT NULL column.

推荐答案

C.Account <>'' 等价于 ISNULL( c.Account, '' ) <>''

SQL Server 可能足够聪明,可以将 IsNull 转换为等效的 SARG 表达式,但是如果您一心想要使用函数,那么 Coalesce 是更好的选择,因为它是 SQL 标准的一部分,允许使用多个值(而不是仅仅两个与 IsNull)并避免使用很可能是 Microsoft 在 IsNull 中设计的最容易混淆的函数名称.

SQL Server is probably smart enough to translate IsNull into the equivalent SARG expression but if you are bent on using a function, then Coalesce is a better choice because it is part of the SQL Standard, allows for multiple values (instead of just two with IsNull) and avoids using quite possibly the most confusing function name Microsoft ever devised in IsNull.

这篇关于在 TSQL 中使用 ISNULL 的 Sargable 查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
SSIS: Model design issue causing duplications - can two fact tables be connected?(SSIS:模型设计问题导致重复-两个事实表可以连接吗?)
SQL Server Graph Database - shortest path using multiple edge types(SQL Server图形数据库-使用多种边类型的最短路径)
Invalid column name when using EF Core filtered includes(使用EF核心过滤包括时无效的列名)
How should make faster SQL Server filtering procedure with many parameters(如何让多参数的SQL Server过滤程序更快)
How can I generate an entity–relationship (ER) diagram of a database using Microsoft SQL Server Management Studio?(如何使用Microsoft SQL Server Management Studio生成数据库的实体关系(ER)图?)