次の方法で共有


以前のバージョンの SQL Server における、強化された日付型と時刻型の動作 (ODBC)

このトピックでは、強化された日付や時刻の機能を使用するクライアント アプリケーションが SQL Server 2008 より前のバージョンの SQL Server と通信する場合、および Microsoft Data Access Components、Windows Data Access Components、または SQL Server 2008 より前のバージョンの SQL Server Native Client を使用しているクライアント アプリケーションから、機能強化された日付や時刻をサポートするサーバーへコマンドを送信する場合に想定される動作について説明します。

下位クライアントの動作

SQL Server 2008 より前のバージョンの SQL Server Native Client を使用してコンパイルされたクライアント アプリケーションでは、新しい日付型と時刻型が nvarchar 列と見なされます。「ODBC の日付/時刻の強化に対するデータ型のサポート」の「データ形式 : 文字列とリテラル」で説明されているように、列のコンテンツはリテラル表現になります。列のサイズは、列に指定された秒の小数部の有効桁数に対するリテラルの最大長です。

カタログ API によって、クライアントに返される下位データ型のコード (nvarchar など) および関連する下位の表現 (適切なリテラル形式など) と一貫性のあるメタデータが返されます。ただし、返されるデータ型名は、実際の SQL Server 2008 の型名です。

SQLDescribeColSQLDescribeParamSQGetDescField、および SQLColAttribute は、型名を含むあらゆる点で下位型と一貫性のあるステートメント メタデータを返します。nvarchar は、このような下位型の一例です。

日付型または時刻型へのスキーマ変更が加えられた SQL Server 2008 サーバーに対して下位クライアント アプリケーションが実行された場合に、予想される動作は次のとおりです。

SQL Server 2005 の型

SQL Server 2008 の型

ODBC クライアントの型

結果の変換 (SQL から C へ)

パラメータの変換 (C から SQL へ)

Datetime

Date

SQL_C_TYPE_DATE

OK

OK (1)

SQL_C_TYPE_TIMESTAMP

時刻フィールドは 0 に設定されます。

OK (2)

時刻フィールドが 0 以外の場合は失敗します。SQL Server 2005 で機能します。

Time(0)

SQL_C_TYPE_TIME

OK

OK (1)

SQL_C_TYPE_TIMESTAMP

日付フィールドは現在の日付に設定されます。

OK (2)

日付は無視されます。秒の小数部が 0 以外の場合は失敗します。SQL Server 2005 で機能します。

Time(7)

SQL_C_TIME

失敗します (時刻リテラルが無効です)。

OK (1)

SQL_C_TYPE_TIMESTAMP

失敗します (時刻リテラルが無効です)。

OK (1)

Datetime2(3)

SQL_C_TYPE_TIMESTAMP

OK

OK (1)

Datetime2(7)

SQL_C_TYPE_TIMESTAMP

OK

クライアントでの変換により、値は 1/300 秒単位に丸められます。

Smalldatetime

Date

SQL_C_TYPE_DATE

OK

OK

SQL_C_TYPE_TIMESTAMP

時刻フィールドは 0 に設定されます。

OK (2)

時刻フィールドが 0 以外の場合は失敗します。SQL Server 2005 で機能します。

Time(0)

SQL_C_TYPE_TIME

OK

OK

SQL_C_TYPE_TIMESTAMP

日付フィールドは現在の日付に設定されます。

OK (2)

日付は無視されます。秒の小数部が 0 以外の場合は失敗します。

SQL Server 2005 で機能します。

Datetime2(0)

SQL_C_TYPE_TIMESTAMP

OK

OK

記号の説明

記号

意味

1

SQL Server 2005 で機能した場合には、SQL Server 2008 でも引き続き機能します。

2

SQL Server 2005 で機能したアプリケーションが、SQL Server 2008 では失敗する可能性があります。

一般的なスキーマ変更のみが考慮されていることに注意してください。一般的な変更は次のとおりです。

  • 論理的にアプリケーションで日付値または時刻値のみが必要な場合に、新しい型を使用します。ただし、個別の日付型および時刻型がないため、アプリケーションでは datetime または smalldatetime の使用が強制されました。

  • 追加の秒の小数部の有効桁数または精度を取得するために、新しい型を使用します。

  • 日付と時刻に推奨されるデータ型なので datetime2 に切り替えます。

SQLColumns、SQLProcedureColumns、および SQLSpecialColumns から返される列のメタデータ

日付型または時刻型に対して返される列の値を次に示します。

列の型

date

time

smalldatetime

datetime

datetime2

datetimeoffset

DATA_TYPE

SQL_WVARCHAR

SQL_WVARCHAR

SQL_TYPE_TIMESTAMP

SQL_TYPE_TIMESTAMP

SQL_WVARCHAR

SQL_WVARCHAR

TYPE_NAME

date

time

smalldatetime

datetime

datetime2

datetimeoffset

COLUMN_SIZE

10

8,10..16

16

23

19, 21..27

26, 28..34

BUFFER_LENGTH

20

16, 20..32

16

16

38, 42..54

52, 56..68

DECIMAL_DIGITS

NULL

NULL

0

3

NULL

NULL

SQL_DATA_TYPE

SQL_WVARCHAR

SQL_WVARCHAR

SQL_DATETIME

SQL_DATETIME

SQL_WVARCHAR

SQL_WVARCHAR

SQL_DATETIME_SUB

NULL

NULL

SQL_CODE_TIMESTAMP

SQL_CODE_TIMESTAMP

NULL

NULL

CHAR_OCTET_LENGTH

NULL

NULL

NULL

NULL

NULL

NULL

SS_DATA_TYPE

0

0

111

111

0

0

SQLSpecialColumns は、SQL_DATA_TYPE、SQL_DATETIME_SUB、CHAR_OCTET_LENGTH、または SS_DATA_TYPE を返しません。

SQLGetTypeInfo から返されるデータ型のメタデータ

日付型または時刻型に対して返される列の値を次に示します。

列の型

date

time

smalldatetime

datetime

datetime2

datetimeoffset

TYPE_NAME

date

time

smalldatetime

datetime

datetime2

datetimeoffset

DATA_TYPE

SQL_WVARCHAR

SQL_WVARCHAR

SQL_TYPE_TIMESTAMP

SQL_TYPE_TIMESTAMP

SQL_WVARCHAR

SQL_WVARCHAR

COLUMN_SIZE

10

16

16

23

27

34

LITERAL_PREFIX

LITERAL_SUFFIX

CREATE_PARAMS

NULL

NULL

NULL

NULL

NULL

NULL

NULLABLE

SQL_NULLABLE

SQL_NULLABLE

SQL_NULLABLE

SQL_NULLABLE

SQL_NULLABLE

SQL_NULLABLE

CASE_SENSITIVE

SQL_FALSE

SQL_FALSE

SQL_FALSE

SQL_FALSE

SQL_FALSE

SQL_FALSE

SEARCHABLE

SQL_PRED_SEARCHABLE

SQL_PRED_SEARCHABLE

SQL_PRED_SEARCHABLE

SQL_PRED_SEARCHABLE

SQL_PRED_SEARCHABLE

SQL_PRED_SEARCHABLE

UNSIGNED_ATTRIBUTE

NULL

NULL

NULL

NULL

NULL

NULL

FXED_PREC_SCALE

SQL_FALSE

SQL_FALSE

SQL_FALSE

SQL_FALSE

SQL_FALSE

SQL_FALSE

AUTO_UNIQUE_VALUE

NULL

NULL

NULL

NULL

NULL

NULL

LOCAL_TYPE_NAME

date

time

smalldatetime

datetime

datetime2

datetimeoffset

MINIMUM_SCALE

NULL

NULL

0

3

NULL

NULL

MAXIMUM_SCALE

NULL

NULL

0

3

NULL

NULL

SQL_DATA_TYPE

SQL_WVARCHAR

SQL_WVARCHAR

SQL_DATETIME

SQL_DATETIME

SQL_WVARCHAR

SQL_WVARCHAR

SQL_DATETIME_SUB

NULL

NULL

SQL_CODE_TIMESTAMP

SQL_CODE_TIMESTAMP

NULL

NULL

NUM_PREC_RADIX

NULL

NULL

NULL

NULL

NULL

NULL

INTERVAL_PRECISION

NULL

NULL

NULL

NULL

NULL

NULL

USERTYPE

0

0

12

22

0

0

下位サーバーの動作

SQL Server 2008 より前のバージョンのサーバー インスタンスに接続している場合、新しいサーバーの型または関連するメタデータ コードおよび記述子フィールドを使用しようとすると、SQL_ERROR が返されます。"接続しているサーバーのバージョンに対して、SQL データ型が無効です" というメッセージで SQLSTATE HY004 の診断レコード、または、"データ型の属性に関する制限に違反しました" というメッセージで SQLSTATE 07006 の診断レコードが生成されます。

関連項目

概念