次の方法で共有


SQL 文法の選択

SQL ステートメントを作成するときに最初に行う決定は、使用する文法です。 Open Group、ANSI、ISO などのさまざまな標準本体から入手できる文法に加えて、ほぼすべての DBMS ベンダーが独自の文法を定義しており、それぞれの文法は標準とは若干異なります。

付録 C: SQL 文法では、すべての ODBC ドライバーでサポートする必要がある最小限の SQL 文法について説明しています。 この文法は、SQL-92 のエントリ レベルのサブセットです。 ドライバーは、SQL-92 で定義されている中間、完全、または FIPS 127-2 の移行レベルに準拠するための追加の文法をサポートする場合があります。 詳細については、「付録 C: SQL 文法および SQL-92 の SQL 最小文法」を参照してください。

付録 C では、SQL-92 文法でカバーされていない外部結合など、一般的に使用できる言語機能の標準文法を含むエスケープ シーケンスも定義されています。 詳細については、このセクションで後述する「付録 C: SQL 文法」および「エスケープ シーケンス」の ODBC エスケープ シーケンスを参照してください。

選択された文法は、ドライバーがステートメントを処理する方法に影響します。 ドライバーは、SQL-92 SQL と ODBC で定義されたエスケープ シーケンスを DBMS 固有の SQL に変更する必要があります。 ほとんどの SQL 文法は 1 つ以上のさまざまな標準に基づいているため、ほとんどのドライバーは、この要件を満たすためにほぼ作業を行いません。 多くの場合、ODBC で定義されているエスケープ シーケンスを検索し、DBMS 固有の文法に置き換えるだけで構成されます。 ドライバーが認識しない文法に遭遇すると、文法が DBMS 固有であると見なされ、実行のためにデータ ソースに変更を加えずに SQL ステートメントを渡します。

そのため、使用する文法には、SQL-92 文法 (および ODBC エスケープ シーケンス) と DBMS 固有の文法の 2 つの選択肢があります。 2 つのうち、SQL-92 文法のみが相互運用可能であるため、すべての相互運用可能なアプリケーションで使用する必要があります。 相互運用できないアプリケーションでは、SQL-92 文法または DBMS 固有の文法を使用できます。 DBMS 固有の文法には 2 つの利点があります。SQL-92 でカバーされていない機能を利用でき、ドライバーが変更する必要がないため、わずかに高速です。 後者の機能は、SQL_ATTR_NOSCAN ステートメント属性を設定することで部分的に適用できます。これによって、ドライバーがエスケープ シーケンスを検索したり置き換えたりできなくなります。

SQL-92 文法が使用されている場合、アプリケーションは SQLNativeSql を呼び出すことによって、ドライバーによってどのように変更されるかを検出できます。 これは、多くの場合、アプリケーションをデバッグするときに便利です。 SQLNativeSql は SQL ステートメントを受け入れ、ドライバーが変更した後に返します。 この関数はコア インターフェイスの準拠レベルにあるため、すべてのドライバーでサポートされています。