在TSQL中使用ISNULL的可疑查询

jco*_*and 6 t-sql sql-server isnull

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

AND c.Account IS NOT NULL 
AND c.Account <> ''
Run Code Online (Sandbox Code Playgroud)

要么

AND ISNULL(c.Account,'') <> ''
Run Code Online (Sandbox Code Playgroud)

我突然意识到Account它来自一个LEFT JOIN所以它可能是空的.我想要他们只相交的情况,这意味着我真的应该用一个INNER JOIN吧?谢谢你的facepalms;)

然而,忽视了肉麻的自我实现,我还是想知道在一般情况下,我不能让这个问题的答案AccountNOT NULL列.

Tho*_*mas 2

C.Account <> ''相当于ISNULL( c.Account, '' ) <> ''

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

  • 错误状态仍然有效。我仍在使用 SQL-Server 2005,至少还没有修复。此查询返回两条错误消息,而不是一条(与“ISNULL”一样):“SELECT COALESCE(xyz, 0) FROM sys.objects”。大多数人都没有意识到这一点,但每个人都建议使用“COALESCE”而不是“ISNULL”。即使没有子查询,`ISNULL` 运行所需的 CPU 也会减少 20-30%。 (2认同)