適用対象:SQL Server
Azure SQL データベース
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
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 オプションを設定することで、SQL Native Client ODBC ドライバーを使用する ODBC アプリケーションの移植性が高まります。これは、サーバーの動作が ISO 標準に準拠するためです。
DB-Library ベースのアプリケーションは、通常これらのオプションを有効にしません。 同じ SQL ステートメントを実行するときに ODBC クライアントまたは DB ライブラリ クライアント間で異なる動作を観察しているサイトでは、SQL Server Native Client ODBC ドライバーに問題があると想定しないでください。 まず、その文を DB-Library 環境で、SQL Server Native Client ODBCドライバーで使うのと同じSETオプションで再実行すべきです。
SETオプションはユーザーやアプリケーションによっていつでもオン・オフできるため、ストアドプロシージャやトリガーの開発者は、上記のSETオプションをオン・オフの両方でテストする際にも注意すべきです。 これにより、プロシージャやトリガーの起動時に、接続に設定されているオプションに関係なく、プロシージャやトリガーが適切に動作することを確認できます。 これらのオプションのいずれかに特定の設定を必要とするトリガーやストアドプロシージャは、トリガーやストアドプロシージャの冒頭に SET 文を発行すべきです。 この SET 文はトリガーまたはストアドプロシージャの実行時のみ有効であり、プロシージャまたはトリガーが終了すると元の設定が復元されます。
SQL Serverのインスタンスに接続すると、4つ目のSETオプションであるCONCAT_NULL_YIELDS_NULLもオンにされます。 データ ソースまたは SQLDriverConnect または SQLBrowseConnect で AnsiNPW=NO が指定されている場合、SQL Server Native Client ODBC ドライバーではこれらのオプションは設定されません。
前述のISOオプションと同様に、SQL ServerネイティブクライアントのODBCドライバーは、データソースやQUOTED_IDENTIFIER、SQLBrowseConnectのいずれかでQuotedID=NOが指定されている場合、オプションをオンにしません。
ドライバーが SET オプションの現在の状態を知るために、ODBCアプリケーションはこれらのオプションを設定する際に Transact-SQL SET 文を使わないべきです。 これらのオプションを設定する場合は、データ ソースまたは接続オプションのみを使用するようにします。 アプリケーションが SET 文を発行すると、ドライバは誤ったSQL文を生成することがあります。