ISO オプションの効果
適用対象: SQL Server Azure SQL Database 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 ドライバーに問題があると想定しないでください。 まず、SQL Server Native Client ODBC ドライバーで使用されるのと同じ SET オプションを使用して、DB ライブラリ環境でステートメントを再実行する必要があります。
SET オプションはユーザーやアプリケーションがいつでも有効または無効にできるので、ストアド プロシージャやトリガーの開発者は、上記の SET オプションを有効にした場合と無効にした場合の両方で、開発したプロシージャやトリガーをテストする必要があります。 これにより、プロシージャやトリガーの起動時に、接続に設定されているオプションに関係なく、プロシージャやトリガーが適切に動作することを確認できます。 これらのオプションのいずれかについて特定の設定が必要なトリガーやストアド プロシージャは、そのトリガーやストアド プロシージャの起動時に SET ステートメントを実行する必要があります。 この SET ステートメントは、トリガーやストアド プロシージャが実行されている間だけ有効になり、トリガーやストアド プロシージャが終了すると元の設定が復元されます。
SQL Server のインスタンスに接続すると、4 つ目の SET オプション (CONCAT_NULL_YIELDS_NULL) もオンになります。 データ ソースまたは SQLDriverConnect または SQLBrowseConnect で AnsiNPW=NO が指定されている場合、SQL Server Native Client ODBC ドライバーではこれらのオプションは設定されません。
前述の ISO オプションと同様に、データ ソースで QuotedID=NO が指定されている場合、または SQLDriverConnect または SQLBrowseConnect の場合、SQL Server Native Client ODBC ドライバーは QUOTED_IDENTIFIER オプションをオンにしません。
ドライバーが SET オプションの現在の状態を把握できるようにするには、ODBC アプリケーションで Transact-SQL SET ステートメントを使用してこれらのオプションを設定しないでください。 これらのオプションを設定する場合は、データ ソースまたは接続オプションのみを使用するようにします。 アプリケーションが SET ステートメントを実行した場合、ドライバーは不正な SQL ステートメントを生成する可能性があります。