2015-07-22 12 views
7

Natknąłem się na to podczas zmiany widoku innej osoby na serwerze SQL.Czy istnieje różnica między NOT (ColumnName LIKE "% a%") a ColumnName NOT LIKE '% a%'

Czy są jakieś różnice między:

NOT (ColumnName LIKE '%a%') 

i

ColumnName NOT LIKE '%a%' 

czy są jakieś różnice w wynikach lub jakakolwiek różnica w wynikach? Czy jest to po prostu inny dziwny sposób (mimo wszystko dziwne), że SQL Server zmienia twój kod, kiedy używasz Kreatora kwerend lub Kreatora widoku?

+1

@tinka: dlaczego tak jest dokładnie?) – potashin

Odpowiedz

9

Nie, nie ma różnicy.

Obie składnie mają sens - not like jest bardziej wyraźny, ale nie można po prostu wyłączyć not (prosty jednolity operator boolowski) w takich przypadkach.

W większości przypadków forma zapytania nie ma większego znaczenia dla wydajności - w każdym przypadku prawdopodobnie patrzysz na subtelny błąd w planowaniu realizacji. Zanim zapytanie znajdzie się w pobliżu, zostaje rozerwane, przeanalizowane i przebudowane na rzeczywiste kroki potrzebne do uzyskania wyników - zawsze, gdy zastanawiasz się, co naprawdę dzieje się w zapytaniu, po prostu wykonaj je przy użyciu planu wykonania rzeczywistego, a Ty " zobaczę.

Jeśli jesteś człowiekiem, nie ma powodu, aby nie używać not like - najczęściej używałbyś innej metody jako części automatycznego generowania kodu (negując wynik innego wyrażenia), a nie w ludzkim pisanym kodzie. Jeśli nie budujesz tego zapytania, oczywiście, łącząc ze sobą łańcuchy - to może to mieć sens nawet wtedy, gdy sam napiszesz.

Aha, a jeśli chodzi o styl, zauważ, że tak jak powiedziałem, not jest operatorem, a nie wywołaniem funkcji. Więc właściwy sposób korzystać z nawiasów byłoby albo

not ColumnName like '%a%' 

lub lepiej,

(not ColumnName like '%a%') 

lub, jeśli jesteś szalona (lub ponownie, generując kod):

(not (ColumnName LIKE '%a%')) 

Używanie składnia wywołania funkcji może być myląca dla niektórych - a pierwszeństwo operatora w T-SQL nie jest dokładnie intuicyjne (zbyt trudne jest używanie łatwych w użyciu i unikanie nawiasów, co czasami jest mylące). Większość generatorów SQL ma tendencję do bycia ostrożnym i używania więcej nawiasów niż jest to absolutnie konieczne, co zwykle prowadzi do lepszej czytelności (i poprawności :)), bez znaczącego wpływu na wydajność lub czegokolwiek.

+0

Dziękuję za wyczerpującą odpowiedź! – ASindleMouat