以前のバージョンの SQL Server における、強化された日付型と時刻型の動作 (ODBC)
適用対象: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
このトピックでは、拡張日時機能を使用するクライアント アプリケーションが SQL Server 2008 (10.0.x) より前のバージョンの SQL Server と通信する場合、および Microsoft Data Access Components、Windows Data Access Components、または SQL Server 2008 (10.0.x) より前のバージョンの SQL Server Native Client を使用するクライアント アプリケーションが、拡張日付と時刻の機能をサポートするサーバーにコマンドを送信する場合の予期される動作について説明します。
下位クライアントの動作
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 へ) |
---|---|---|---|---|
日時 | 日 | 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 | 日 | 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 |
検索可能 | 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 (10.0.x) 以前のバージョンのサーバー インスタンスに接続すると、新しいサーバーの種類または関連付けられているメタデータ コードと記述子フィールドを使用しようとすると、SQL_ERRORが返されます。 "接続しているサーバーのバージョンに対して、SQL データ型が無効です" というメッセージで SQLSTATE HY004 の診断レコード、または、"データ型の属性に関する制限に違反しました" というメッセージで SQLSTATE 07006 の診断レコードが生成されます。
参照
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示