ISO オプションの効果

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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-Library クライアント間で異なる動作を観察しているサイトでは、SQL Server Native Client ODBC ドライバーに問題があることを前提としないでください。 まず、SQL Server Native Client ODBC ドライバーで使用されるのと同じ SET オプションを使用して、DB-Library環境で ステートメントを再実行する必要があります。

SET オプションはユーザーやアプリケーションがいつでも有効または無効にできるので、ストアド プロシージャやトリガーの開発者は、上記の SET オプションを有効にした場合と無効にした場合の両方で、開発したプロシージャやトリガーをテストする必要があります。 これにより、プロシージャやトリガーの起動時に、接続に設定されているオプションに関係なく、プロシージャやトリガーが適切に動作することを確認できます。 これらのオプションのいずれかについて特定の設定が必要なトリガーやストアド プロシージャは、そのトリガーやストアド プロシージャの起動時に 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 ステートメントを生成する可能性があります。

参照

ステートメントの実行 (ODBC)
SQLDriverConnect
SQLBrowseConnect