Perilaku Jenis Tanggal dan Waktu yang Ditingkatkan dengan Versi SQL Server Sebelumnya (ODBC)
Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)
Topik ini menjelaskan perilaku yang diharapkan ketika aplikasi klien yang menggunakan fitur tanggal dan waktu yang ditingkatkan berkomunikasi dengan versi SQL Server yang lebih lama dari SQL Server 2008 (10.0.x), dan saat aplikasi klien menggunakan Komponen Akses Data Microsoft, Komponen Akses Data Windows, atau versi SQL Server Native Client yang lebih lama dari SQL Server 2008 (10.0.x) mengirimkan perintah ke server yang mendukung fitur tanggal dan waktu yang ditingkatkan.
Perilaku Klien Tingkat Bawah
Aplikasi klien yang dikompilasi menggunakan versi SQL Server Native Client sebelum SQL Server 2008 (10.0.x) melihat jenis tanggal/waktu baru sebagai kolom nvarchar. Konten kolom adalah representasi harfiah, seperti yang dijelaskan dalam bagian "Format Data: String dan Literal" dari Dukungan Tipe Data untuk Peningkatan Tanggal dan Waktu ODBC. Ukuran kolom adalah panjang harfiah maksimum untuk presisi detik pecahan yang ditentukan untuk kolom.
API Katalog akan mengembalikan metadata yang konsisten dengan kode jenis data tingkat bawah yang dikembalikan ke klien (misalnya, nvarchar) dan representasi tingkat bawah terkait (misalnya, format literal yang sesuai). Namun, nama jenis data yang dikembalikan akan menjadi nama jenis SQL Server 2008 (10.0.x) asli.
Metadata pernyataan yang dikembalikan oleh SQLDescribeCol, SQLDescribeParam, SQGetDescField, dan SQLColAttribute akan mengembalikan metadata yang konsisten dengan jenis tingkat bawah dalam semua hal, termasuk nama jenis. Contoh jenis tingkat bawah seperti itu adalah nvarchar.
Ketika aplikasi klien tingkat bawah berjalan terhadap server SQL Server 2008 (10.0.x) (atau yang lebih baru) di mana skema berubah ke jenis tanggal/waktu telah dibuat, perilaku yang diharapkan adalah sebagai berikut:
Jenis SQL Server 2005 | Tipe SQL Server 2008 (10.0.x) (atau yang lebih baru) | Jenis klien ODBC | Konversi hasil (SQL ke C) | Konversi parameter (C ke SQL) |
---|---|---|---|---|
Tanggalwaktu | Tanggal | SQL_C_TYPE_DATE | OK | OK (1) |
SQL_C_TYPE_TIMESTAMP | Bidang waktu diatur ke nol. | OK (2) Gagal jika bidang waktu bukan nol. Bekerja dengan SQL Server 2005 (9.x). |
||
Waktu(0) | SQL_C_TYPE_TIME | OK | OK (1) | |
SQL_C_TYPE_TIMESTAMP | Bidang tanggal diatur ke tanggal saat ini. | OK (2) Tanggal diabaikan. Gagal jika detik pecahan bukan nol. Bekerja dengan SQL Server 2005 (9.x). |
||
Waktu(7) | SQL_C_TIME | Gagal - waktu harfiah tidak valid. | OK (1) | |
SQL_C_TYPE_TIMESTAMP | Gagal - waktu harfiah tidak valid. | OK (1) | ||
Datetime2(3) | SQL_C_TYPE_TIMESTAMP | OK | OK (1) | |
Datetime2(7) | SQL_C_TYPE_TIMESTAMP | OK | Nilai akan dibulatkan ke detik ke-1/300 oleh konversi klien. | |
Waktu smalldatetime | Tanggal | SQL_C_TYPE_DATE | OK | OK |
SQL_C_TYPE_TIMESTAMP | Bidang waktu diatur ke nol. | OK (2) Gagal jika bidang waktu bukan nol. Bekerja dengan SQL Server 2005 (9.x). |
||
Waktu(0) | SQL_C_TYPE_TIME | OK | OK | |
SQL_C_TYPE_TIMESTAMP | Bidang tanggal diatur ke tanggal saat ini. | OK (2) Tanggal diabaikan. Gagal jika detik pecahan bukan nol. Bekerja dengan SQL Server 2005 (9.x). |
||
Datetime2(0) | SQL_C_TYPE_TIMESTAMP | OK | OK |
Kunci ke Simbol
Simbol | Arti |
---|---|
1 | Jika bekerja dengan SQL Server 2005 (9.x) itu harus terus bekerja dengan versi SQL Server yang lebih baru. |
2 | Aplikasi yang bekerja dengan SQL Server 2005 (9.x) dapat gagal dengan versi SQL Server yang lebih baru. |
Perhatikan bahwa hanya perubahan skema umum yang telah dipertimbangkan. Berikut ini adalah perubahan umum:
Menggunakan jenis baru di mana aplikasi secara logis hanya memerlukan nilai tanggal atau waktu. Namun, aplikasi dipaksa untuk menggunakan tanggalwaktu atau smalldatetime karena kurangnya jenis tanggal dan waktu terpisah.
Menggunakan jenis baru untuk mendapatkan presisi atau akurasi detik pecahan tambahan.
Beralih ke datetime2 karena ini adalah tipe data tanggal dan waktu yang disukai.
Metadata Kolom dikembalikan oleh SQLColumns, SQLProcedureColumns, dan SQLSpecialColumns
Nilai kolom berikut dikembalikan untuk jenis tanggal/waktu:
Jenis Kolom | date | waktu | smalldatetime | datetime | tanggalwaktu2 | tanggalwaktulewat |
---|---|---|---|---|---|---|
DATA_TYPE | SQL_WVARCHAR | SQL_WVARCHAR | SQL_TYPE_TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_WVARCHAR | SQL_WVARCHAR |
TYPE_NAME | date | waktu | smalldatetime | datetime | tanggalwaktu2 | tanggalwaktulewat |
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 tidak mengembalikan SQL_DATA_TYPE, SQL_DATETIME_SUB, CHAR_OCTET_LENGTH, atau SS_DATA_TYPE.
Metadata Tipe Data yang Dikembalikan oleh SQLGetTypeInfo
Nilai kolom berikut dikembalikan untuk jenis tanggal/waktu:
Jenis Kolom | date | waktu | smalldatetime | datetime | tanggalwaktu2 | tanggalwaktulewat |
---|---|---|---|---|---|---|
TYPE_NAME | date | waktu | smalldatetime | datetime | tanggalwaktu2 | tanggalwaktulewat |
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 |
DAPAT DICARI | 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 | waktu | smalldatetime | datetime | tanggalwaktu2 | tanggalwaktulewat |
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 |
Perilaku Server Tingkat Bawah
Saat terhubung ke instans server dari versi sebelumnya yang SQL Server 2008 (10.0.x), setiap upaya untuk menggunakan jenis server baru atau kode metadata terkait dan bidang deskriptor akan mengakibatkan SQL_ERROR dikembalikan. Catatan diagnostik akan dihasilkan dengan SQLSTATE HY004 dan pesan "Jenis data SQL tidak valid untuk versi server pada koneksi", atau dengan 07006 dan "Pelanggaran atribut jenis data terbatas".
Lihat Juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk