Sie haben Recht. Es gibt keinen Vorteil bei der Verwendung von LIKE, es sei denn, Sie führen einen Wildcard-Abgleich durch. Darüber hinaus kann die Verwendung ohne Platzhalter zur Verwendung eines ineffizienten Abfrageplans führen.
Sunny hat es fast geschafft :)
Führen Sie in QA in einer Standardinstallation von SQL2005
Folgendes aus %Vor%Also stimmt LIKE nicht mit nachfolgenden Leerzeichen überein, auf der Seite des Abfrageplans funktionieren beide fast gleich, aber der Join '=' ist ein kleines bisschen besser.
Eine weitere Sache, die Sie bei der Verwendung von LIKE beachten sollten, ist, dass Sie Ihre Saite ordnungsgemäß verlassen.
%Vor%Im Allgemeinen verwenden Leute LIKE nicht für genaues Matching, weil die austretenden Probleme alle Arten von Komplikationen und subtilen Fehlern verursachen, die Menschen vergessen zu entkommen und es gibt eine Welt voller Schmerzen.
Aber ... wenn Sie eine wirklich exakte Übereinstimmung suchen, die effizient ist, kann LIKE das Problem lösen.
Sagen Sie, Sie möchten den Benutzernamen mit "sam" vergleichen und nicht "Sam" oder "Sam" erhalten, und unglücklicherweise wird bei der Sortierung der Spalte nicht zwischen Groß- und Kleinschreibung unterschieden.
Etwas wie das Folgende (mit der Flucht hinzugefügt) ist der Weg zu gehen.
%Vor%Der Grund für eine doppelte Übereinstimmung besteht darin, einen Tabellenscan zu vermeiden.
Wie auch immer ....
Ich denke das Varbinary Casting Trick ist weniger anfällig für Fehler und leichter zu merken.
Wenn keine Platzhalter verwendet werden, besteht der Unterschied darin, dass "=" eine exakte Übereinstimmung ergibt, aber LIKE eine Zeichenfolge mit nachfolgenden Leerzeichen (von SSBO) abgleicht:
Wenn Sie Zeichenfolgenvergleiche ausführen mit LIKE, alle Charaktere in der Musterzeichenfolge sind signifikant, einschließlich führender oder nachstehender Leerzeichen. Wenn ein Vergleich in einer Abfrage durchgeführt werden soll gebe alle Zeilen mit einer LIKE-Zeichenfolge zurück 'abc' (abc gefolgt von einem einzelnen Leerzeichen), eine Zeile, in der der Wert von Diese Spalte ist abc (abc ohne a Leerzeichen) wird nicht zurückgegeben. Jedoch, nachgestellte Leerzeichen, im Ausdruck zu dem das Muster zugeordnet ist, sind ignoriert. Wenn ein Vergleich in einer Abfrage ist um alle Zeilen mit der Zeichenfolge zurückzugeben LIKE 'abc' (abc ohne Leerzeichen), alles Zeilen, die mit abc beginnen und null haben oder mehr abschließende Leerzeichen werden zurückgegeben.
Immer, wenn ich eine gespeicherte Prozedur schreibe, um Daten basierend auf einer String-Variablen (varchar, nvarchar, char) auszuwählen, würde ich etwas wie:
haben %Vor%Also mit anderen Worten, um die Aufzeichnung zu treffen, hätte ich
%Vor%Aber manchmal stoße ich auf Code, der LIK E anstelle von =
verwendet %Vor%Wann würdest du es benutzen? Sollte das nicht nur verwendet werden, wenn Sie einen Wildcard-Abgleich benötigen?
BEARBEITEN
Danke für die Antworten.
Ich denke, dass ich klarstellen muss, dass das, was ich wirklich zu fragen versuchte, war: wenn es eine Situation geben könnte, in der es bevorzugt wurde, anstelle von "=" genaues String-Matching zu verwenden. Von den Antworten konnte ich sagen, dass es keine geben würde. Aus meiner eigenen Erfahrung würde ich selbst in Situationen, in denen ich z. B. den Fall und führende und endende Leerzeichen ignorieren muss, ltrim, rtrim, auf beiden Strings und dann "=" verwenden. Nochmals vielen Dank für Ihre Eingabe.
Mit dem Schlüsselwort LIKE können Sie stattdessen das Feld %code% mit einem bestimmten Muster vergleichen einer festen "Zeichenfolge".
Wenn Sie dies im Code anderer Leute sehen, können sie vielleicht einer Person erlauben, einen String mit einem Muster oder Platzhaltern zu übergeben.
Ja - Sie haben Recht - es sollte nur für den Wildcard-Abgleich verwendet werden. Es sollte sparsam verwendet werden, vor allem bei sehr großen Tabellen auf nicht indizierten Feldern, da es Ihre Suchanfragen verlangsamen kann.
Ich stieß auf das gleiche Problem. Es dauerte etwa anderthalb Minuten, um eine ähnliche Abfrage mit %code% auszuführen. Wenn ich %code% in %code% änderte, war die Abfrage viel schneller.
LIKE steht für Wildcard-Matching, wobei as = (equals) für eine exakte Übereinstimmung steht.
Ich denke auch, dass es für Felder verwendet wurde, die von FULL TEXT CATALOGS für harte Kernstringvergleiche katalogisiert wurden.
Ja, soweit ich weiß, ist die Verwendung von "Like" ohne Platzhalter identisch mit dem Operator "=". Sind Sie sicher, dass der Eingabeparameter keine Platzhalter enthält?