Like, Alike, *, % und die Kompatibilität

Es gibt Dinge, die gehen an einem vorbei, ohne dass man es merkt. Das war bei mir der Fall mit den Thema der Überschrift: Ich arbeite größtenteils mit Access-Datenbanken und weiß, dass dort das Sternchen (*) als Platzhalter für beliebige Zeichen beim Einsatz des Like-Operators zum Einsatz kommt. Und wenn ich mal mit dem SQL Server arbeite, dann weiß ich, dass dort stattdessen das Prozentzeichen gefragt ist (%). Neulich erhielt ich aber eine Datenbank von einem Leser, der sich wunderte, warum eine Lösung bei ihm schlicht nicht arbeitete. Nach einigen Experimenten und einer Internetrecherche war die Lösung gefunden: Der Leser betrieb die Datenbank im SQL-92-Kompatibiltätsmodus, was bedeutet, dass die Platzhalter des SQL Servers in LIKE-Vergleichen zum Einsatz kommen. Was es damit auf sich hat und wie Sie damit umgehen, erfahren Sie im vorliegenden Beitrag.

Standardmäßig arbeitet Access mit Access-SQL, was beispielsweise heißt, dass als Platzhalter für beliebig viele Zeichen in einem LIKE-Ausdruck das Sternchen zum Einsatz kommt und als Platzhalter für genau ein Zeichen das Prozentzeichen.

Im SQL Server ist das anders: Hier setzt man für beliebig viele Zeichen das Prozentzeichen als Platzhalter (%) und für ein einziges Zeichen den Unterstrich (_).

SQL Server-kompatible Syntax

Allerdings kann man bereits seit Access 2010 in den Access-Optionen einstellen, in welchem Modus künftig neu erstellte Datenbanken arbeiten sollen. Dazu öffnen Sie die Access-Optionen und wechseln zum Bereich Objekt-Designer|Abfrageentwurf|SQL Server-kompatible Syntax (ANSI92). Die dortige Option Standard für neue Datenbanken ist üblicherweise nicht aktiviert (siehe Bild 1). Dementsprechend ist auch die nicht direkt bearbeitbare Eigenschaft In dieser Datenbank verwenden normalerweise nicht aktiviert.

Einstellungen für die SQL-Syntax

Bild 1: Einstellungen für die SQL-Syntax

Erst wenn wir die Eigenschaft Standard für neue Datenbanken in den Access-Optionen einer beliebigen Datenbank (oder auch in einer Access-Instanz ohne geöffnete Datenbank – dazu nach dem Öffnen die Escape-Taste drücken, um den Datei öffnen-Bereich auszublenden) aktivieren, wird eine anschließend neu erstellte Datenbank im SQL Server-kompatiblen Modus geöffnet.

Wenn Sie nun eine neue Datenbank erstellen und den Optionen-Dialog erneut öffnen, sind beide Optionen aktiviert. Und Sie können die Option In dieser Datenbank verwenden sogar direkt einstellen (siehe Bild 2).

Aktivierte SQL Server-kompatible Syntax

Bild 2: Aktivierte SQL Server-kompatible Syntax

Was ändert sich nun durch diese Einstellung Beim Experimentieren mit dem Like-Operator im Entwurf einer Abfrage geben wir testweise den folgenden Ausdruck ein:

Like 'C*'

Nach Abschluss der Eingabe wird Like in den Operator ALike umgewandelt (siehe Bild 3). Wenn wir nun in die Datenblattansicht der Abfrage wechseln, erhalten wir allerdings ein leeres Datenblatt. Die ALike-Funktion arbeitet also scheinbar nicht mit den von Access-SQL bekannten Platzhaltern.

Umwandlung von Like in ALike

Bild 3: Umwandlung von Like in ALike

Was ist aber nun der Vorteil von ALike, wenn es nun schon automatisch von Access für Like eingesetzt wird Der Vorteil ist, dass Sie mit ALike die mit SQL-92 kompatiblen Platzhalter auch unter Access einsetzen können. Sie können also mit der gleichen Abfrage sowohl auf die Daten aus Access-Tabellen zugreifen als auch direkt auf SQL Server-Tabellen.

In Datenbanken, für die In dieser Datenbank verwenden als Wert der Option SQL Server-kompatible Syntax (ANSI-92) verwendet wird, können Sie das Prozentzeichen und den Unterstrich nur verwenden, wenn Sie direkt auf SQL Server-Datenbanken und kompatible zugreifen.

Platzhalter im Code

Wenn Sie nun Code programmieren, der den Like-Operator mit dem Sternchen als Platzhalter verwenden soll, funktioniert dieser nur in Datenbanken wie erwartet, bei denen In dieser Datenbank verwenden für die Option SQL Server-kompatible Syntax (ANSI-92) nicht aktiviert ist.

Wenn Sie diesen Code dann in eine Datenbank übertragen, bei der die SQL Server-kompatible Syntax aktiviert ist, funktioniert dieser nicht mehr wie erwartet.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar