SQL Server Native Client日時の改善

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

重要

SQL Server Native Client (SNAC と略されることがよくあります) は、SQL Server 2022 (16.x) と SQL Server Management Studio 19 (SSMS) から削除されました。 SQL Server Native Client (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。 今後、新しい Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server または最新の Microsoft ODBC Driver for SQL Server に切り替えてください。 SQL Server データベース エンジン (バージョン 2012 から 2019) のコンポーネントとして付属する SQLNCLI については、このサポート ライフサイクルの例外を参照してください。

このトピックでは、SQL Server 2008 (10.0.x) で追加された日付と時刻のデータ型のSQL Server Native Clientのサポートについて説明します。

日付/時刻の機能強化の詳細については、「日付と時刻の機能強化 (OLE DB)」および「日付と時刻の改善 (ODBC)」を参照してください。

使用法

ここでは、新しい日付型と時刻型のさまざまな使用方法について説明します。

個別のデータ型として日付を使用する

SQL Server 2008 (10.0.x) 以降では、日付/時刻型のサポートが強化され、SQL_TYPE_DATE ODBC 型 (ODBC 2.0 アプリケーションの場合はSQL_DATE) と OLE DB 型DBTYPE_DBDATEを使用する方が効率的になります。

個別のデータ型として時刻を使用する

OLE DB には既に、有効桁数が 1 秒のデータ型として DBTYPE_DBTIME があります。このデータ型には時刻のみが含まれます。 この型は、ODBC の SQL_TYPE_TIME (ODBC 2.0 アプリケーションの場合は SQL_TIME) に相当します。

SQL Server の新しい時刻データ型では、秒の小数部の精度が 100 ナノ秒です。 これには、SQL Server Native Client (DBTYPE_DBTIME2 (OLE DB) とSQL_SS_TIME2 (ODBC) の新しい型が必要です。 秒の小数部を含まない時刻を使用するように記述された既存のアプリケーションでは、time(0) 列を使用できます。 アプリケーションがメタデータに返される型に依存しない場合は、既存の OLE DB DBTYPE_TIME 型と ODBC SQL_TYPE_TIME 型、およびそれに対応する構造体が正常に動作します。

秒の有効桁数が拡張された個別のデータ型として時刻を使用する

プロセス制御や製造アプリケーションなど、アプリケーションによっては、有効桁数が 100 ナノ秒までの時刻データを処理できる必要があります。 このための新しい型が DBTYPE_DBTIME2 (OLE DB) と SQL_SS_TIME2 (ODBC) です。

秒の有効桁数が拡張された Datetime を使用する

OLE DB では既に、有効桁数が 1 ナノ秒までの型が定義されています。 ただし、この型は既に SQL Server の既存のアプリケーションで使用されており、このようなアプリケーションでは、有効桁数を 1/300 秒までしか想定していません。 新しい datetime2(3) 型は、既存の datetime 型と直接的な互換性がありません。 これがアプリケーションの動作に影響するというリスクがある場合、アプリケーションは新しい DBCOLUMN フラグを使用して、実際のサーバーの種類を判断する必要があります。

ODBC DB でも既に、有効桁数が 1 ナノ秒までの型が定義されています。 ただし、この型は既存のSQL Server アプリケーションで既に使用されており、このようなアプリケーションでは 3 ミリ秒の精度しか必要と見なされます。 新しい datetime2(3) 型は、既存の datetime 型と直接互換性がありません。 datetime2(3) の有効桁数は 1 ミリ秒、 datetime の有効桁数は 1/300 秒です。 ODBC では、アプリケーションが SQL_DESC_TYPE_NAME 記述子フィールドで使用されているサーバーの種類を判断できます。 したがって、既存の型 SQL_TYPE_TIMESTAMP (ODBC 2.0 アプリケーションの場合は SQL_TIMESTAMP) は両方の型に使用できます。

秒の有効桁数とタイム ゾーンが拡張された Datetime を使用する

アプリケーションによっては、タイム ゾーン情報を含む datetime 値が必要です。 これは、新しい型 DBTYPE_DBTIMESTAMPOFFSET (OLE DB) および SQL_SS_TIMESTAMPOFFSET (ODBC) でサポートされています。

既存の変換と一貫性のあるクライアント側変換で Date/Time/Datetime/Datetimeoffset データを使用する

ODBC 標準では、既存の date 型、time 型、および timestamp 型の間の変換のしくみについて説明します。 これらは一貫した方法で拡張され、SQL Server 2008 (10.0.x) で導入されたすべての日付と時刻の型間の変換が含まれます。

参照

SQL Server Native Client の機能