NOT(ColumnName LIKE'%a%')和ColumnName NOT LIKE'%a%'之间是否有区别

ASi*_*uat 8 sql sql-server

我在修改SQL Server中的其他人的视图时遇到了这个问题.

以下是否有任何区别:

NOT (ColumnName LIKE '%a%')
Run Code Online (Sandbox Code Playgroud)

ColumnName NOT LIKE '%a%'
Run Code Online (Sandbox Code Playgroud)

是否有任何性能差异或结果有任何差异?或者这只是另一种奇怪的方式(对我来说很奇怪),当您使用"查询"构建器或"视图"构建器时,SQL Server会改变您的代码吗?

Lua*_*aan 10

不,没有区别.

这两种语法都有意义 - not like更清晰一点,但not在这种情况下,你不能只是禁用(一个简单的一元布尔运算符).

大多数情况下,查询的形式对性能并不重要 - 任何时候,你可能会在执行计划程序中查看一个微妙的错误.查询得到任何接近执行,它撕裂之前,分析并重建到得到结果所需的实际步骤-只要你不知道什么是真正的查询发生的事情,只是执行它与包括实际的执行计划,你会看到.

如果你是一个人,没有什么理由不使用not like- 你主要使用另一种方式作为一些自动生成代码的一部分(否定另一个表达式的结果),而不是人类编写的代码.除非你通过将字符串拼接在一起构建那个查询,当然 - 即使你自己编写它也可能有意义.

哦,至于风格,请注意,正如我所说,not是一个操作员,而不是一个函数调用.所以使用括号的正确方法也是

not ColumnName like '%a%'
Run Code Online (Sandbox Code Playgroud)

或更好,

(not ColumnName like '%a%')
Run Code Online (Sandbox Code Playgroud)

或者,如果你疯了(或再次生成代码):

(not (ColumnName LIKE '%a%'))
Run Code Online (Sandbox Code Playgroud)

使用函数调用语法可能会使某些人感到困惑 - 并且T-SQL中的运算符优先级并不完全直观(它太难以使用并且避免使用括号,这有时会让人感到困惑).大多数SQL生成器都倾向于谨慎,使用更多括号而不是严格必要,这通常会带来更好的可读性(和正确性:)),同时没有任何有意义的性能影响或任何事情.