以前のバージョンの SQL Server における、強化された日付型と時刻型の動作 (ODBC)
適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
このトピックでは、拡張日時機能を使用するクライアント アプリケーションが、SQL Server 2008 (10.0.x) より前のバージョンのSQL Serverと通信する場合、および Microsoft データ アクセス コンポーネント、Windows データ アクセス コンポーネント、または SQL Server Native Client 以前のバージョンを使用するクライアント アプリケーションと通信する場合の動作について説明します。SQL Server 2008 (10.0.x) は、強化された日時機能をサポートするサーバーにコマンドを送信します。
下位クライアントの動作
SQL Server 2008 (10.0.x) より前のバージョンの SQL Server Native Client を使用してコンパイルされたクライアント アプリケーションでは、新しい日付/時刻型が nvarchar 列として表示されます。 列の内容は、 ODBC 日付と時刻の改善のためのデータ型のサポートに関するページの「データ形式: 文字列とリテラル」セクションで説明されているように、リテラル表現です。 列のサイズは、列に指定された秒の小数部の有効桁数に対するリテラルの最大長です。
カタログ API によって、クライアントに返される下位データ型のコード (nvarchar など) および関連する下位の表現 (適切なリテラル形式など) と一貫性のあるメタデータが返されます。 ただし、返されるデータ型名は、実際のSQL Server 2008 (10.0.x) 型名になります。
SQLDescribeCol、SQLDescribeParam、SQGetDescField、および SQLColAttribute によって返されるステートメント メタデータは、型名を含むすべての点で下位レベルの型と一致するメタデータを返します。 このような下位レベルの型の例として 、nvarchar があります。
下位レベルのクライアント アプリケーションが、日付/時刻型のスキーマ変更が行われたSQL Server 2008 (10.0.x) (またはそれ以降) サーバーに対して実行される場合、想定される動作は次のようになります。
SQL Server 2005 の型 | SQL Server 2008 (10.0.x) (またはそれ以降) 型 | 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 (9.x) で動作します。 |
||
Time(0) | SQL_C_TYPE_TIME | OK | OK (1) | |
SQL_C_TYPE_TIMESTAMP | 日付フィールドは現在の日付に設定されます。 | OK (2) 日付は無視されます。 秒の小数部が 0 以外の場合は失敗します。 SQL Server 2005 (9.x) で動作します。 |
||
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 (9.x) で動作します。 |
||
Time(0) | SQL_C_TYPE_TIME | OK | OK | |
SQL_C_TYPE_TIMESTAMP | 日付フィールドは現在の日付に設定されます。 | OK (2) 日付は無視されます。 秒の小数部が 0 以外の場合は失敗します。 SQL Server 2005 (9.x) で動作します。 |
||
Datetime2(0) | SQL_C_TYPE_TIMESTAMP | OK | OK |
記号の説明
Symbol | 意味 |
---|---|
1 | SQL Server 2005 (9.x) で動作していた場合は、より新しいバージョンのSQL Serverで引き続き動作する必要があります。 |
2 | SQL Server 2005 (9.x) で動作していたアプリケーションが、より新しいバージョンの SQL Server で失敗する可能性があります。 |
一般的なスキーマ変更のみが考慮されていることに注意してください。 一般的な変更は次のとおりです。
論理的にアプリケーションで日付値または時刻値のみが必要な場合に、新しい型を使用します。 ただし、個別の日付型および時刻型がないため、アプリケーションでは 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 |
下位サーバーの動作
2008 (10.0.x) をSQL Server以前のバージョンのサーバー インスタンスに接続すると、新しいサーバーの種類または関連付けられているメタデータ コードと記述子フィールドを使用しようとすると、SQL_ERRORが返されます。 "接続しているサーバーのバージョンに対して、SQL データ型が無効です" というメッセージで SQLSTATE HY004 の診断レコード、または、"データ型の属性に関する制限に違反しました" というメッセージで SQLSTATE 07006 の診断レコードが生成されます。
参照
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示