Konversi yang Dilakukan dari Server ke Klien
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Artikel ini menjelaskan konversi tanggal/waktu yang dilakukan antara SQL Server 2008 (10.0.x) dan versi yang lebih baru, dan aplikasi klien yang ditulis dengan Driver OLE DB untuk SQL Server.
Konversi
Tabel berikut menjelaskan konversi antara jenis yang dikembalikan ke klien dan jenis dalam pengikatan. Untuk parameter output, jika ICommandWithParameters::SetParameterInfo telah dipanggil dan jenis yang ditentukan dalam pwszDataSourceType tidak cocok dengan jenis aktual di server, konversi implisit akan dilakukan oleh server, dan jenis yang dikembalikan ke klien akan cocok dengan jenis yang ditentukan melalui ICommandWithParameters::SetParameterInfo. Ini dapat menyebabkan hasil konversi yang tidak terduga ketika aturan konversi server berbeda dari yang dijelaskan dalam artikel ini. Misalnya, ketika tanggal default harus disediakan, SQL Server menggunakan 1900-1-1 daripada 1899-12-30.
Ke-> Dari |
TANGGAL | DBDATE | DBTIME | DBTIME2 | DBTIMESTAMP | DBTIMESTAMPOFFSET | FILETIME | BYTE | VARIAN | SSVARIANT | BSTR | STR | WSTR |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tanggal | 1, 7 | OK | - | - | 1 | 1, 3 | 1, 7 | - | OK (VT_BSTR) | OK | OK | 4 | 4 |
Waktu | 5, 6, 7 | - | 9 | OK | 6 | 3, 6 | 5, 6 | - | OK (VT_BSTR) | OK | OK | 4 | 4 |
Waktu smalldatetime | 7 | 8 | 9, 10 | 10 | OK | 3 | 7 | - | 7 (VT_DATE) | OK | OK | 4 | 4 |
Tanggalwaktu | 5, 7 | 8 | 9, 10 | 10 | OK | 3 | 7 | - | 7 (VT_DATE) | OK | OK | 4 | 4 |
Tanggalwaktu2 | 5, 7 | 8 | 9, 10 | 10 | 7 | 3 | 5, 7 | - | OK (VT_BSTR) | OK | OK | 4 | 4 |
Datetimeoffset | 5, 7, 11 | 8, 11 | 9, 10, 11 | 10, 11 | 7, 11 | OK | 5, 7, 11 | - | OK (VT_BSTR) | OK | OK | 4 | 4 |
Char, Varchar, Nchar, Nvarchar |
7, 13 | 12 | 12, 9 | 12 | 12 | 12 | 7, 13 | T/A | T/A | T/A | T/A | T/A | T/A |
Sql_variant (tanggalwaktu) |
7 | 8 | 9, 10 | 10 | OK | 3 | 7 | - | 7(VT_DATE) | OK | OK | 4 | 4 |
Sql_variant (smalldatetime) |
7 | 8 | 9, 10 | 10 | OK | 3 | 7 | - | 7(VT_DATE) | OK | OK | 4 | 4 |
Sql_variant (tanggal) |
1, 7 | OK | 2 | 2 | 1 | 1, 3 | 1, 7 | - | OK(VT_BSTR) | OK | OK | 4 | 4 |
Sql_variant (waktu) |
5, 6, 7 | 2 | 6 | OK | 6 | 3, 6 | 5, 6 | - | OK(VT_BSTR) | OK | OK | 4 | 4 |
Sql_variant (datetime2) |
5, 7 | 8 | 9, 10 | 10 | OK | 3 | 5, 7 | - | OK(VT_BSTR) | OK | OK | 4 | 4 |
Sql_variant (datetimeoffset) |
5, 7, 11 | 8, 11 | 9, 10, 11 | 10, 11 | 7, 11 | OK | 5, 7, 11 | - | OK(VT_BSTR) | OK | OK | 4 | 4 |
Kunci ke Simbol
Simbol | Makna |
---|---|
OK | Tidak ada konversi yang diperlukan. |
- | Tidak ada konversi yang didukung. Jika pengikatan divalidasi saat IAccessor::CreateAccessor dipanggil, DBBINDSTATUS_UPSUPPORTEDCONVERSION dikembalikan dalam rgStatus. Saat validasi aksesor ditangguhkan, DBSTATUS_E_BADACCESSOR diatur. |
1 | Bidang waktu diatur ke nol. |
2 | DBSTATUS_E_CANTCONVERTVALUE diatur. |
3 | Zona waktu diatur ke nol. |
4 | Jika buffer klien tidak cukup besar, DBSTATUS_S_TRUNCATED diatur. Ketika jenis server menyertakan detik pecahan, jumlah digit dalam string hasil sama persis dengan skala jenis server. |
5 | Pemotongan detik atau detik pecahan diabaikan. |
6 | Tanggal diatur ke tanggal saat ini, kecuali sumbernya adalah waktu string harfiah dan tujuannya DBTYPE_DATE. Dalam hal ini, 1899-12-30 digunakan. |
7 | Jika nilai meluap, DBSTATUS_E_DATAOVERFLOW diatur. |
8 | Bidang waktu diabaikan. |
9 | Bidang detik pecahan diabaikan. |
10 | Komponen tanggal diabaikan. |
11 | Waktu dikonversi ke zona waktu klien. Jika terjadi kesalahan selama DBSTATUS_E_DATAOVERFLOW konversi ini diatur. |
12 | String diurai sebagai LITERAL ISO dan dikonversi ke jenis target. Jika gagal, string diurai sebagai literal tanggal OLE (yang juga memiliki komponen waktu) dan dikonversi dari tanggal OLE (DBTYPE_DATE) ke jenis target. String harus sesuai dengan sintaks untuk literal jenis target yang diizinkan agar penguraian format ISO berhasil. Agar penguraian OLE berhasil, string harus sesuai dengan sintaks yang dikenali oleh OLE. Jika string tidak dapat diurai, DBSTATUS_E_CANTCONVERTVALUE diatur. Jika ada nilai komponen di luar rentang, DBSTATUS_E_DATAOVERFLOW diatur. |
13 | String diurai sebagai LITERAL ISO dan dikonversi ke jenis target. Jika gagal, string diurai sebagai literal tanggal OLE (yang juga memiliki komponen waktu) dan dikonversi dari tanggal OLE (DBTYPE_DATE) ke jenis target. String harus sesuai dengan sintaks untuk literal tanggalwaktu, kecuali tujuannya DBTYPE_DATE atau DBTYPE_DBTIMESTAMP. Jika demikian, baik tanggalwaktu atau waktu harfiah diizinkan agar penguraian format ISO berhasil. Agar penguraian OLE berhasil, string harus sesuai dengan sintaks yang dikenali oleh OLE. Jika string tidak dapat diurai, DBSTATUS_E_CANTCONVERTVALUE diatur. Jika ada nilai komponen di luar rentang, DBSTATUS_E_DATAOVERFLOW diatur. |