SQL Server ネイティブ クライアントの日付と時刻の機能強化

適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

重要

SQL Server Native Client (SNAC) は同梱されていません。

  • SQL Server 2022 (16.x) 以降のバージョン
  • SQL Server Management Studio 19 以降のバージョン

SQL Server Native Client (SQLNCLI または SQLNCLI11) と従来の Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。

新しいプロジェクトの場合は、次のいずれかのドライバーを使用します。

SQL Server データベース エンジン (バージョン 2012 から 2019) のコンポーネントとして付属する SQLNCLI については、この「サポート ライフサイクルの例外」を参照してください。

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

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

使用方法

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

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

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

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

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 の機能