2015-07-22 22 views
7

Başka birinin Görünümünü SQL Server'da değiştirirken buna rastladım.NOT (ColumnName LIKE '% a%') ve ColumnName NOT LIKE '% a%'

arasında herhangi bir fark var mıdır:

NOT (ColumnName LIKE '%a%') 

ve

ColumnName NOT LIKE '%a%' 

herhangi bir performans farklılıkları ya sonuçlarında herhangi bir fark var mı? Ya da bir Query oluşturucu veya bir View oluşturucu kullandığınızda SQL Server kodunuzu değiştirir başka bir garip yolu (yine de bana garip)?

+1

@tinka: neden bu tam olarak?) – potashin

cevap

9

Hayır, fark yoktur.

İki sözdizimi her ikisi de mantıklı - not like daha net olanıdır, ancak böyle durumlarda not'u (basit bir tekli boole işleci) devre dışı bırakmanız gibi değil.

Çoğu zaman, sorgunun biçimi performans açısından gerçekten önemli değil - her seferinde, muhtemelen yürütme planlayıcısında ince bir hataya bakıyorsunuzdur. Sorguyu yürütmeye yakın bir yere götürmeden önce, parçalara ayrılır, analiz edilir ve sonuçları elde etmek için gerekli olan gerçek adımlara yeniden oluşturulur - bir sorguda gerçekte ne olduğunu merak ettiğinizde gerçekten sorgusunu gerçekleştirin. görüşürüz.

Eğer bir insansanız, not like'u kullanmamanız için çok az sebep vardır - çoğunlukla, insan otomatik kod kodunun bir parçası olarak (başka bir ifadenin sonucunu olumsuz yönde etkiler), diğer bir deyişle insan yazılı kodunda değilsiniz. Bu sorguyu, dizeleri birbirine yapıştırarak oluşturmazsanız, tabii ki - kendiniz yazarken bile mantıklı olabilir.

Oh, ve stil için, dediğim gibi, not bir işleç değil, bir işlev çağrısıdır. Eğer (veya yeniden üreten kodu) deliysen Yani parantez kullanmak için uygun bir yol, ya

not ColumnName like '%a%' 

veya daha iyi,

(not ColumnName like '%a%') 

olabilir ya olacaktır:

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

kullanma işlev çağrısı sözdizimi bir kısmı için kafa karıştırıcı olabilir ve T-SQL'deki operatör önceliği tam olarak sezgisel değildir (kullanımı kolay ve parantezlerden kaçınmak çok zor çalışır, bu da bazen kafa karıştırıcıdır). Çoğu SQL jeneratörü ihtiyatlı tarafta olma eğilimindedir ve kesinlikle daha fazla parantez kullanırlar, bu da genellikle daha iyi okunabilirlik (ve doğruluk :)) sağlarken, anlamlı bir performans etkisi ya da hiçbir şey yapmaz.

+0

Kapsamlı cevap için teşekkürler! – ASindleMouat