Scelta di una grammatica SQL
La prima decisione da prendere quando si creano istruzioni SQL è la grammatica da usare. Oltre alle grammatiche disponibili dei vari organismi standard, ad esempio Open Group, ANSI e ISO, praticamente ogni fornitore DBMS definisce la propria grammatica, e ognuna varia leggermente rispetto allo standard.
Appendice C: Grammatica SQL, descrive la grammatica SQL minima che tutti i driver ODBC devono supportare. Questa grammatica è un sottoinsieme del livello SQL-92 iniziale. I driver possono supportare una grammatica aggiuntiva per conformarsi ai livelli intermedi, completi o FIPS 127-2 di transizione definiti da SQL-92. Per altre informazioni, vedere Grammatica SQL minima nell'Appendice C: Grammatica SQL e SQL-92.
L'Appendice C definisce anche sequenze di escape contenenti grammatica standard per le funzionalità del linguaggio comunemente disponibili, ad esempio outer join, che non sono contemplate dalla grammatica SQL-92. Per altre informazioni, vedere Sequenze di escape ODBC nell'Appendice C: Grammatica SQL e Sequenze di escape più avanti in questa sezione.
La grammatica scelta influisce sul modo in cui il driver elabora l'istruzione. I driver devono modificare SQL-92 SQL e le sequenze di escape definite da ODBC in SQL specifico di DBMS. Poiché la maggior parte delle grammatiche SQL si basa su uno o più standard, la maggior parte dei driver fa poco o nulla per soddisfare questo requisito. Spesso si dedica solo alla ricerca delle sequenze di escape definite da ODBC e alla sostituzione con la grammatica specifica di DBMS. Quando un driver rileva una grammatica che non riconosce, presuppone che la grammatica sia specifica di DBMS e passe l'istruzione SQL senza modifiche all'origine dati per l'esecuzione.
Esistono quindi due opzioni di grammatica da usare: la grammatica SQL-92 (e le sequenze di escape ODBC) e una grammatica specifica di DBMS. Delle due, solo la grammatica SQL-92 è interoperabile, quindi tutte le applicazioni interoperabili devono usarla. Le applicazioni non interoperabili possono usare la grammatica SQL-92 o una grammatica specifica di DBMS. Le grammatiche specifiche di DBMS presentano due vantaggi: possono sfruttare qualsiasi funzionalità non contemplata da SQL-92 e sono leggermente più veloci perché il driver non deve modificarle. Quest'ultima funzionalità può essere applicata parzialmente impostando l'attributo di istruzione SQL_ATTR_NOSCAN, che impedisce al driver di cercare e sostituire le sequenze di escape.
Se viene usata la grammatica SQL-92, l'applicazione può scoprire come viene modificata dal driver chiamando SQLNativeSql. Questa operazione è spesso utile durante il debug delle applicazioni. SQLNativeSql accetta un'istruzione SQL e la restituisce dopo la modifica del driver. Poiché questa funzione è nel livello di conformità dell'interfaccia Core, è supportata da tutti i driver.