次の方法で共有


SQL Server 2005 Native Client からのアプリケーションの更新

このトピックでは、SQL Server 2005 年にSQL Server Native ClientされてからのSQL Server Native Clientの破壊的変更について説明します。

Microsoft Data Access Components (MDAC) から SQL Server Native Client にアップグレードすると、動作の違いが表示される場合もあります。 詳細については、「MDAC からアプリケーションをSQL Server Native Clientに更新する」を参照してください。

SQL Server Native Client 9.0 は、SQL Server 2005 に付属しています。 SQL Server 2008 に付属する SQL Server Native Client 10.0。 SQL Server に付属する SQL Server 2008 R2 Native Client 10.5。 SQL Server Native Client 11.0 SQL Server 2012 および SQL Server 2014 に付属しています。

SQL Server 2005 以降のSQL Server Native Clientでの動作の変更 説明
OLE DB によって定義された有効桁数までしか埋め込まれない 変換されたデータがサーバーに送信される変換の場合は、SQL Server Native Client (2008 SQL Server 以降) は、値の最大長までのデータの末尾のdatetimeゼロのみを埋め込みます。 SQL Server Native Client 9.0 では、9 桁まで埋め込まれていました。
ICommandWithParameter::SetParameterInfo の DBTYPE_DBTIMESTAMP が検証される。 SQL Server Native Client (2008 SQL Server 以降) では、ICommandWithParameter::SetParameterInfo の bScale に対する OLE DB 要件が実装され、DBTYPE_DBTIMESTAMPの秒の小数部の有効桁数に設定されます。
ストアド プロシージャは sp_columns 、IS_NULLABLE列の "NO" ではなく "NO" を 返すようになりました。 SQL Server Native Client 10.0 (SQL Server 2008) 以降、sp_columnsストアド プロシージャは、IS_NULLABLE列の "NO" ではなく "NO" を返すようになりました。
SQLSetDescRec、SQLBindParameter、SQLBindCol で整合性チェックが実行されるようになりました。 SQL Server Native Client 10.0 より前のバージョンでは、SQL_DESC_DATA_PTRを設定しても、SQLSetDescRec、SQLBindParameter、または SQLBindCol の記述子の種類に対して一貫性チェックが発生しませんでした。
SQLCopyDesc で記述子の整合性チェックが行われます。 SQL Server Native Client 10.0 より前のバージョンでは、SQLCopyDesc は、特定のレコードに対してSQL_DESC_DATA_PTR フィールドが設定されたときに、一貫性チェックを行いませんでした。
SQLGetDescRec では、記述子の整合性チェックが行われなくなりました。 SQL Server Native Client 10.0 より前のバージョンでは、SQLGetDescRec は、SQL_DESC_DATA_PTR フィールドが設定されたときにチェック記述子整合性を実行していました。 これは ODBC 仕様では必須ではなく、SQL Server Native Client 10.0 (SQL Server 2008) 以降のバージョンでは、この整合性チェックは実行されなくなりました。
日付が範囲外の場合に別のエラーが返される 型の場合、範囲外のdatetime日付については、以前のバージョンで返されたものとは異なるエラー番号がSQL Server Native Client (2008 SQL Server 以降) によって返されます。

具体的には、SQL Server Native Client 9.0 では、 への文字列変換で範囲外のすべての年の値に対して datetime22007 が返され、バージョン 10.0 (SQL Server 2008) 以降のSQL Server Native Clientは、日付が または でdatetime2datetimesmalldatetimeサポートされている範囲外にある場合、22008 を返します。
丸め処理によって日が変わる場合に datetime 値では秒の小数部が丸められずに切り捨てられる SQL Server Native Client 10.0 より前のバージョンでは、サーバーに送信される値のクライアント動作datetimeは、1/300 秒に最も近い値に丸め込みます。 SQL Server Native Client 10.0 以降では、丸めによって日が変わると、小数部の秒が切り捨てられます。
値に対して datetime 秒の実行が可能です。 SQL Server 2005 サーバーに接続する SQL Server 2008 Native Client (またはそれ以降) で構築されたアプリケーションは、DBTYPE_DBTIMESTAMP (OLE DB) または SQL_TIMESTAMP (ODBC) の型識別子を持つ datetime 列にバインドし、スケールが 0 の場合、サーバーに送信されるデータの時間部分の秒と秒の小数部を切り捨てます。

次に例を示します。

入力データ: 1994-08-21 21:21:36.000

挿入されるデータ: 1994-08-21 21:21:00.000
DBTYPE_DBTIME から DBTYPE_DATE への OLE DB データ変換で日が変更されなくなる SQL Server Native Client 10.0 より前のバージョンでは、DBTYPE_DATE の時刻部分が午前 0 時から 0.5 秒以内の場合、OLE DB の変換コードによって日が変更されました。 SQL Server Native Client 10.0 以降、日は変更されません (秒の小数部は切り捨てられ、丸められません)。
IBCPSession::BCColFmt の変換の変更。 SQL Server Native Client 10.0 以降では、IBCPSession::BCOColFmt を使用して SQLDATETIME または SQLDATETIME を文字列型に変換すると、小数部の値がエクスポートされます。 たとえば、SQLDATETIME 型を SQLNVARCHARMAX 型に変換すると、以前のバージョンの SQL Server Native Clientが返されます

1989-02-01 00:00:00 が返されます。 SQL Server Native Client 10.0 以降のバージョンでは、1989-02-01 00:00:00.0000000 が返されます。
送信するデータのサイズを SQL_LEN_DATA_AT_EXEC で指定した長さと一致させる必要がある SQL_LEN_DATA_AT_EXEC を使用する場合、データのサイズを SQL_LEN_DATA_AT_EXEC で指定した長さと一致させる必要があります。 SQL_DATA_AT_EXEC を使用することはできますが、SQL_LEN_DATA_AT_EXEC を使用するとパフォーマンスが向上する可能性があります。
BCP API を使用するカスタム アプリケーションで警告が表示される 指定されたフィールド長をデータ長が上回る場合、どの型の場合でも BCP API によって警告メッセージが生成されます。 以前のバージョンでは、この警告は、すべての型ではなく文字型についてのみ表示されました。
日付型または時刻型としてバインドされた sql_variant に空の文字列を挿入するとエラーが生成される SQL Server Native Client 9.0 では、日付/時刻型としてバインドにsql_variant空の文字列を挿入するとエラーは生成されませんでした。 SQL Server Native Client 10.0 以降では、この状況でエラーが正しく生成されます。
SQL_C_TYPE_TIMESTAMP と DBTYPE_DBTIMESTAMP のパラメーターの検証がより厳密に行われる 2008 年SQL Server Native Client より前のバージョンでは、datetime値は SQL Server によって と smalldatetime 列のdatetimeスケールに合わせて丸められました。 SQL Server 2008 Native Client (以降) では、ODBC コア仕様で定義されているより厳密な検証規則が秒の小数部に適用されます。 クライアントのバインドで明示的または暗黙的に指定された桁数を使用することによって、末尾の桁を切り捨てることなくパラメーター値を SQL 型に変換できない場合は、エラーが返されます。
SQL Server は、トリガーの実行時に異なる結果を返す場合がある SQL Server 2008 で導入された変更により、トリガーが有効になったときNOCOUNT OFFにトリガーが実行される原因となったステートメントからアプリケーションが異なる結果が返される可能性があります。 このような場合、アプリケーションでエラーが発生することがあります。 このエラーを解決するには、トリガーで を設定 NOCOUNT ON するか、SQLMoreResults を呼び出して次の結果に進みます。

参照

SQL Server Native Client プログラミング