SQL Server-Praxis

LIKE-Suche: Eingaben, Platzhalter und Indexzugriff

Erstellen Sie parametrisierte Präfixsuchen mit korrekter Maskierung und unterscheiden Sie Präfix-, Teilzeichenfolgen- und Volltextsuche.

Wer nach einem Produktcode mit Unterstrich sucht, erwartet meist einen Unterstrich und kein beliebiges Zeichen. Parametrisierung verhindert, dass Eingaben zu SQL-Syntax werden, entfernt aber nicht die Platzhalterbedeutung von LIKE. Sichere Ausführung und fachlich richtige Suche sind deshalb getrennte Aufgaben.

Text und Muster unterscheiden

Für eine literale Präfixsuche maskieren Sie zuerst das gewählte Escape-Zeichen, danach Prozent, Unterstrich und öffnende Klammer. Erst anschließend wird der bewusst gewünschte abschließende Platzhalter ergänzt. Die Reihenfolge verhindert, dass neu eingefügte Escape-Zeichen nachträglich erneut verändert werden.

CREATE TABLE #Names(Name nvarchar(100) NOT NULL);
INSERT #Names VALUES(N'A_% report'),(N'ABC report'),(N'A! report');
DECLARE @input nvarchar(100)=N'A_%';
DECLARE @pattern nvarchar(201);
SET @pattern=REPLACE(@input,N'!',N'!!');
SET @pattern=REPLACE(@pattern,N'%',N'!%');
SET @pattern=REPLACE(@pattern,N'_',N'!_');
SET @pattern=REPLACE(@pattern,N'[',N'![')+N'%';
SELECT Name FROM #Names
WHERE Name LIKE @pattern ESCAPE N'!'
ORDER BY Name;

Gesucht werden Namen mit dem tatsächlichen Anfang A_%. A_% report soll passen, ABC report nicht. Das Ausrufezeichen dient als Escape-Zeichen. Ein bereits eingegebenes Ausrufezeichen wird vor allen anderen Ersetzungen verdoppelt und bleibt dadurch normaler Text.

Die Eingabe ist begrenzt, während das Muster Platz für Erweiterungen bietet. Maskierung kann die Zeichenanzahl verdoppeln; der Suffix benötigt ein weiteres Zeichen. Dimensionieren Sie auch den Clientparameter entsprechend. Abschneiden kann ein Escape-Zeichen oder den letzten Platzhalter entfernen und damit das Ergebnis verändern. Stimmen Sie den Parametertyp auf die Spalte ab.

Suchvertrag und Zugriffsweg

Ein Präfix wie ABC% kann häufig einen geordneten Index zur Eingrenzung nutzen. Ein führender Platzhalter wie %ABC% liefert normalerweise keinen vergleichbaren Startbereich eines gewöhnlichen Index. TOP begrenzt ausgegebene Zeilen, garantiert aber nicht wenige untersuchte Zeilen, insbesondere bei seltenen Treffern oder zusätzlicher Sortierung.

Großschreibung und Akzente folgen der Kollation. Entscheiden Sie zuerst, ob cafe und café gleich gelten sollen. Funktionen wie UPPER auf jeder indizierten Zeile können den Indexzugriff erschweren. Eine bewusste Vergleichs- und Schemakonvention ist meist leichter nachvollziehbar als unterschiedliche Transformationen in jeder Abfrage.

Auch Leerzeichen brauchen eine Regel. Feste char-Parameter können Auffüllzeichen einbringen. Automatisches Trimmen verändert möglicherweise einen absichtlich eingegebenen Code. Testen Sie echte Parametertypen und die produktive Kollation, nicht nur eine direkt in SSMS eingefügte Zeichenfolge.

Eine berechenbare Schnittstelle schaffen

Ein leeres Präfix wird nach Ergänzung des Suffixes zu einer Suche nach allem. Entscheiden Sie zwischen Ablehnung, Mindestlänge und einem begrenzten Blättermodus. Berechtigungsfilter müssen vor der Ausgabe wirken. Eine stabile Sortierung mit eindeutigem letzten Schlüssel unterstützt reproduzierbare Seitennavigation.

Volltextsuche passt zu sprachlicher Wortsuche, ersetzt aber keine beliebige Teilzeichenfolgensuche in Produktcodes. Wortzerlegung, Sprache und Satzzeichen beeinflussen Treffer. Eine echte Endungssuche kann einen gepflegten Index auf umgekehrten Zeichenfolgen rechtfertigen; das ist eine separate Modellentscheidung mit zusätzlichen Aktualisierungskosten.

Testdaten sollten Prozent, Unterstrich, Klammern, Escape-Zeichen, Akzente, Leerzeichen und fehlende Treffer enthalten. Vergleichen Sie konkrete Zeilenkennungen und nicht nur Mengen. Messen Sie danach häufige und seltene Präfixe auf realistischem Volumen mit logischen Zugriffen und Laufzeit.

Behalten Sie die Parametrisierung auch nach der Maskierung bei. Die Maskierung löst die Musterinterpretation, nicht SQL-Injection. Prüfen Sie zusätzlich lange Eingaben direkt an der API-Grenze, damit keine unterschiedliche Kürzung zwischen Anwendung und Datenbank entsteht. Eine zuverlässige Suche hält Eingaben als Daten und erfüllt gleichzeitig die dem Nutzer zugesagten Vergleichsregeln.

Falls Nutzer echte Muster eingeben dürfen, bieten Sie dafür einen getrennt bezeichneten Modus an. Vermischen Sie diese Semantik nicht mit dem normalen Textfeld.

Technische Referenzen: Microsoft Learn: LIKE · Microsoft Learn: Collation.

Frage zu diesem Artikel

Haben Sie eine Frage zu diesem Thema?

Beschreiben Sie, was Sie bewerten oder wo Sie nicht weiterkommen. Wir antworten mit einer praktischen Empfehlung.

Inquiries are not enabled in this preview.

Eine Frage zu diesem Artikel stellen