Teilen über


Auswählen einer SQL-Grammatik

Die erste Entscheidung beim Erstellen von SQL-Anweisungen ist die zu verwendende Grammatik. Neben den Grammatiken, die von den verschiedenen Normengremien wie Open Group, ANSI und ISO zur Verfügung stehen, definiert praktisch jeder DBMS-Anbieter seine eigene Grammatik, die jeweils geringfügig vom Standard ab variiert.

Anhang C: SQL Grammar beschreibt die minimale SQL-Grammatik, die alle ODBC-Treiber unterstützen müssen. Diese Grammatik ist eine Teilmenge der Einstiegsebene von SQL-92. Treiber unterstützen möglicherweise zusätzliche Grammatik, um die von SQL-92 definierten Übergangsebenen "Intermediate", "Full" oder "FIPS 127-2" zu erfüllen. Weitere Informationen finden Sie unter SQL-Mindestgrammatik in Anhang C: SQL-Grammatik und SQL-92.

Anhang C definiert auch Escapesequenzen , die Standardgrammatik für häufig verfügbare Sprachfeatures enthalten, z. B. äußere Verknüpfungen, die nicht von der SQL-92-Grammatik abgedeckt werden. Weitere Informationen finden Sie in Anhang C: SQL-Grammatik und Escapesequenzen im Abschnitt "ODBC Escape Sequences" weiter unten in diesem Abschnitt.

Die gewählte Grammatik wirkt sich darauf aus, wie der Treiber die Anweisung verarbeitet. Treiber müssen SQL-92 SQL und die ODBC-definierten Escapesequenzen in DBMS-spezifische SQL ändern. Da die meisten SQL-Grammatiken auf einem oder mehreren der verschiedenen Standards basieren, funktionieren die meisten Treiber wenig oder gar nicht, um diese Anforderung zu erfüllen. Es besteht häufig nur darin, die von ODBC definierten Escapesequenzen zu suchen und sie durch DBMS-spezifische Grammatik zu ersetzen. Wenn ein Treiber auf Grammatik trifft, wird davon ausgegangen, dass die Grammatik DBMS-spezifisch ist und die SQL-Anweisung ohne Änderung an die Datenquelle für die Ausführung übergibt.

Daher gibt es wirklich zwei Auswahlmöglichkeiten für Grammatik: die SQL-92-Grammatik (und die ODBC-Escapesequenzen) und eine DBMS-spezifische Grammatik. Von den beiden ist nur die SQL-92-Grammatik interoperabel, sodass alle interoperablen Anwendungen sie verwenden sollten. Anwendungen, die nicht interoperabel sind, können die SQL-92-Grammatik oder eine DBMS-spezifische Grammatik verwenden. DBMS-spezifische Grammatiken haben zwei Vorteile: Sie können alle Features ausnutzen, die nicht von SQL-92 abgedeckt werden, und sie sind geringfügig schneller, da der Treiber sie nicht ändern muss. Das letztere Feature kann teilweise erzwungen werden, indem das attribut SQL_ATTR_NOSCAN Anweisung festgelegt wird, wodurch verhindert wird, dass der Treiber nach Escapesequenzen sucht und ersetzt.

Wenn die SQL-92-Grammatik verwendet wird, kann die Anwendung ermitteln, wie sie vom Treiber durch Aufrufen von SQLNativeSql geändert wird. Dies ist häufig hilfreich beim Debuggen von Anwendungen. SQLNativeSql akzeptiert eine SQL-Anweisung und gibt sie zurück, nachdem der Treiber sie geändert hat. Da sich diese Funktion auf der Core-Schnittstellenkonformitätsebene befindet, wird sie von allen Treibern unterstützt.