SQL-92 オプションの効果
ODBC 標準は、SQL-92 標準と密接に対応しています。ODBC アプリケーションは、ODBC ドライバの動作が標準に準拠していることを前提としています。SQL Native Client ODBC ドライバは、ODBC 標準の定義に緊密に準拠した動作を実現するために、常に、接続先の SQL Server のバージョンで使用可能な SQL-92 オプションを使用します。
SQL Native Client ODBC ドライバが SQL Server インスタンスに接続すると、サーバーはクライアントが SQL Native Client ODBC ドライバを使用していることを検出し、いくつかのオプションを有効にします。
ステートメント自体はドライバが実行します。ODBC アプリケーションはステートメントの実行に対して何の要求も行いません。SQL-92 オプションを設定することで、SQL Native Client ODBC ドライバを使用する ODBC アプリケーションの移植性が高まります。これは、サーバーの動作が SQL-92 標準に準拠するためです。
DB-Library ベースのアプリケーションは、通常これらのオプションを有効にしません。サイトで同じ SQL ステートメントを実行した場合に ODBC クライアントと DB-Library クライアントとの間で動作に違いが見られる場合、これが SQL Native Client ODBC ドライバの問題であると解釈しないようにしてください。まず、SQL Native Client ODBC ドライバが使用するのと同じ SET オプションを使用して、ステートメントを DB-Library 環境に返します。
SET オプションはユーザーやアプリケーションがいつでも有効または無効にできるので、ストアド プロシージャやトリガの開発者は、上記の SET オプションを有効にした場合と無効にした場合の両方で、開発したプロシージャやトリガをテストする必要があります。これにより、プロシージャやトリガの起動時に、接続に設定されているオプションに関係なく、プロシージャやトリガが適切に動作することを確認できます。これらのオプションのいずれかについて特定の設定が必要なトリガやストアド プロシージャは、そのトリガやストアド プロシージャの起動時に SET ステートメントを実行する必要があります。この SET ステートメントは、トリガやストアド プロシージャが実行されている間だけ有効になり、トリガやストアド プロシージャが終了すると元の設定が復元されます。
SQL Server 2005 のインスタンスに接続しているときは、4 番目の SET オプションの CONCAT_NULL_YIELDS_NULL も有効になります。SQL Native Client ODBC ドライバでは、AnsiNPW=NO がデータ ソースや、SQLDriverConnect または SQLBrowseConnect のいずれかに対して指定されていない場合、SET オプションを有効にしません。
上記の SQL-92 オプションの場合と同様に、SQL Native Client ODBC ドライバでは、QuotedID=NO がデータ ソースや、SQLDriverConnect または SQLBrowseConnect のいずれかに対して指定されていない場合、QUOTED_IDENTIFIER オプションを有効にしません。
ドライバが SET オプションの現在の状態を確認できるようにするために、ODBC アプリケーションでは、Transact-SQL SET ステートメントを使用して SET オプションを設定しないようにします。これらのオプションを設定する場合は、データ ソースまたは接続オプションのみを使用するようにします。アプリケーションが SET ステートメントを実行した場合、ドライバは不正な SQL ステートメントを生成する可能性があります。
参照
概念
ステートメントの実行 (ODBC)
SQLDriverConnect
SQLBrowseConnect