我在修改Server中其他人的视图时遇到了这种情况。
在以下方面是否有任何区别:
NOT (ColumnName LIKE '%a%')和
ColumnName NOT LIKE '%a%'结果是否有任何性能差异或差异?或者这仅仅是SQL Server在使用查询生成器或视图构建器时更改代码的另一种奇怪的方式(无论如何,我还是感到奇怪)?
发布于 2015-07-22 12:38:52
不,没什么区别。
这两种语法都是有意义的-- not like更清晰,但在这种情况下,您不能仅仅禁用not (一个简单的一元布尔运算符)。
大多数情况下,查询的形式对性能并不重要--无论何时,您可能都在查看执行计划器中的一个微妙的bug。在查询接近于执行之前,它被分解、分析并重新构建成获得结果所需的实际步骤--每当您想知道查询中到底发生了什么事情时,只要使用包含实际执行计划来执行它,您就会看到。
如果你是人类,没有什么理由不使用not like --你通常会使用其他方式作为自动生成代码的一部分(否定另一个表达式的结果),而不是在人类编写的代码中。当然,除非您是通过将字符串放在一起构建该查询,否则即使您自己编写它,它也可能是有意义的。
哦,至于样式,请注意,正如我所说的,not是一个运算符,而不是一个函数调用。所以正确的使用括号的方法是
not ColumnName like '%a%'或者更好
(not ColumnName like '%a%')或者,如果您疯了(或者再次生成代码):
(not (ColumnName LIKE '%a%'))使用函数调用语法可能会让某些人感到困惑,而too中的操作符优先级并不完全是直观的(它很难使用并避免括号,有时会有些混淆)。大多数SQL生成器倾向于谨慎,使用比严格需要的括号更多的括号,这通常会带来更好的可读性(和正确性:),而不会产生任何有意义的性能影响或任何东西。
https://stackoverflow.com/questions/31563389
复制相似问题