我在修改其他人的SQL Server视图时遇到了这个问题。
之间是否存在任何差异:
NOT (ColumnName LIKE '%a%')
和
ColumnName NOT LIKE '%a%'
是否有任何性能差异或结果有任何差异?或者这只是另一种奇怪的方式(对我来说很奇怪),当您使用“查询”构建器或“视图”构建器时,SQL Server会改变您的代码吗?
答案 0 :(得分:10)
不,没有区别。
这两种语法都有意义 - not like
更清晰,但在这种情况下,你不能只禁用not
(一个简单的一元布尔运算符)。
大多数情况下,查询的形式对性能并不重要 - 任何时候,你可能会在执行计划程序中查看一个微妙的错误。在查询接近执行之前,它会被撕裂,分析并重建为获得结果所需的实际步骤 - 每当您想知道查询中发生了什么真正时,只需执行包含实际执行计划,你会看到。
如果你是一个人,没有理由不使用not like
- 你大多使用另一种方式作为一些自动生成代码的一部分(否定另一个表达式的结果),而不是人类书面代码。当然,除非您通过将字符串拼接在一起构建该查询,否则即使您自己编写它也可能有意义。
哦,至于样式,请注意,正如我所说,not
是一个运算符,而不是一个函数调用。所以使用括号的正确方法是
not ColumnName like '%a%'
或更好,
(not ColumnName like '%a%')
或者,如果你疯了(或者再次生成代码):
(not (ColumnName LIKE '%a%'))
使用函数调用语法可能会使某些人感到困惑 - 并且T-SQL中的运算符优先级并不完全直观(它太难以易于使用并且避免使用括号,这有时会让人感到困惑)。大多数SQL生成器都倾向于谨慎,使用更多括号而不是严格必要的,这通常会带来更好的可读性(和正确性:)),同时没有任何有意义的性能影响或任何事情。