ODBC 標準は ISO 標準と密接に一致しており、ODBC アプリケーションでは ODBC ドライバーからの標準動作が想定されています。 その動作を ODBC 標準で定義されている動作に厳密に準拠させるために、SQL Server Native Client ODBC ドライバーでは、接続する SQL Server のバージョンで使用できる ISO オプションが常に使用されます。
SQL Server Native Client ODBC ドライバーが SQL Server のインスタンスに接続すると、サーバーはクライアントが SQL Server Native Client ODBC ドライバーを使用していることを検出し、いくつかのオプションをオンに設定します。
ドライバーは、これらのステートメント自体を発行します。ODBC アプリケーションは、それらを要求するために何もしません。 これらのオプションを設定すると、サーバーの動作が ISO 標準と一致するため、ドライバーを使用する ODBC アプリケーションの移植性が高まります。
DB ライブラリ ベースのアプリケーションでは、通常、これらのオプションはオンになりません。 同じ SQL ステートメントを実行するときに ODBC または DB-Library クライアント間で異なる動作を観察しているサイトでは、SQL Server Native Client ODBC ドライバーの問題を想定しないでください。 最初に、SQL Server Native Client ODBC ドライバーで使用されるのと同じ SET オプションを使用して、DB-Library 環境でステートメントを再実行する必要があります。
SET オプションはユーザーとアプリケーションによっていつでも有効または無効にできるため、ストアド プロシージャとトリガーの開発者は、上記の SET オプションをオンとオフの両方に設定して、プロシージャとトリガーをテストする必要もあります。 これにより、プロシージャまたはトリガーを呼び出すときに特定の接続が設定したオプションに関係なく、プロシージャとトリガーが正しく動作します。 これらのオプションの 1 つに特定の設定を必要とするトリガーまたはストアド プロシージャは、トリガーまたはストアド プロシージャの開始時に SET ステートメントを発行する必要があります。 この SET ステートメントは、トリガーまたはストアド プロシージャの実行に対してのみ有効です。プロシージャまたはトリガーが終了すると、元の設定が復元されます。
SQL Server のインスタンスに接続すると、4 つ目の SET オプション (CONCAT_NULL_YIELDS_NULL) もオンになります。 データ ソースまたは SQLDriverConnect または SQLBrowseConnect で AnsiNPW=NO が指定されている場合、SQL Server Native Client ODBC ドライバーでは、これらのオプションは設定されません。
前述の ISO オプションと同様に、データ ソースまたは SQLDriverConnect または SQLBrowseConnect で QuotedID=NO が指定されている場合、SQL Server Native Client ODBC ドライバーは QUOTED_IDENTIFIER オプションをオンにしません。
ドライバーが SET オプションの現在の状態を把握できるようにするには、ODBC アプリケーションでこれらのオプションを設定するために Transact-SQL SET ステートメントを使用しないでください。 これらのオプションは、データ ソースまたは接続オプションを使用してのみ設定する必要があります。 アプリケーションが SET ステートメントを発行した場合、ドライバーは正しくない SQL ステートメントを生成する可能性があります。