Memperbarui Aplikasi dari Klien Asli SQL Server 2005
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Artikel ini membahas perubahan yang melanggar di Driver OLE DB untuk SQL Server sejak SQL Server Native Client di SQL Server 2005 (9.x).
Saat Anda meningkatkan dari Microsoft Data Access Components (MDAC) ke Driver OLE DB untuk SQL Server, Anda mungkin juga melihat beberapa perbedaan perilaku. Untuk informasi selengkapnya, lihat Memperbarui Aplikasi ke Driver OLE DB untuk SQL Server dari MDAC.
SQL Server Native Client 9.0 dikirim dengan SQL Server 2005 (9.x). SQL Server Native Client 10.0 dikirim dengan SQL Server 2008 (10.0.x). SQL Server Native Client 10.5 dikirim dengan SQL Server 2008 R2 (10.50.x). SQL Server Native Client 11.0 dikirim dengan SQL Server 2012 (11.x) dan SQL Server 2014 (12.x).
Perilaku yang diubah di Driver OLE DB untuk SQL Server dibandingkan dengan Klien Asli SQL Server 2005 (9.x) | Deskripsi |
---|---|
Bantalan OLE DB hanya untuk skala yang ditentukan. | Untuk konversi di mana data yang dikonversi dikirim ke server, Driver OLE DB untuk bantalan SQL Server mengikuti nol dalam data hanya hingga panjang maksimum nilai tanggalwaktu . SQL Server Native Client 9.0 diisi hingga 9 digit. |
Validasi DBTYPE_DBTIMESTAMP untuk ICommandWithParameter::SetParameterInfo. | Driver OLE DB untuk SQL Server menerapkan persyaratan OLE DB untuk bScale di ICommandWithParameter::SetParameterInfo untuk diatur ke presisi detik pecahan untuk DBTYPE_DBTIMESTAMP. |
Prosedur tersimpan sp_columns sekarang mengembalikan "TIDAK" alih-alih "TIDAK" untuk kolom IS_NULLABLE. | Di Driver OLE DB untuk SQL Server, sp_columns prosedur tersimpan sekarang mengembalikan "TIDAK" alih-alih "TIDAK" untuk kolom IS_NULLABLE. |
Kesalahan berbeda ditampilkan ketika tanggal berada di luar rentang. | Untuk jenis tanggalwaktu, nomor kesalahan yang berbeda akan dikembalikan oleh Driver OLE DB untuk SQL Server untuk tanggal di luar rentang daripada yang dikembalikan dalam versi sebelumnya. Secara khusus, SQL Server Native Client 9.0 mengembalikan 22007 untuk semua nilai tahun di luar rentang dalam konversi string ke datetime, dan Driver OLE DB untuk SQL Server mengembalikan 22008 ketika tanggal berada dalam rentang yang didukung oleh datetime2 tetapi di luar rentang yang didukung oleh datetime atau smalldatetime. |
nilai tanggalwaktu memotong detik pecahan dan tidak dibulatkan jika pembulatan akan mengubah hari. | Sebelum SQL Server Native Client 10.0, perilaku klien untuk nilai tanggalwaktu yang dikirim ke server adalah membulatkannya ke 1/300 detik terdekat. Dalam Driver OLE DB untuk SQL Server, skenario ini menyebabkan pemotongan detik pecahan jika pembulatan berubah hari. |
Kemungkinan pemotongan detik untuk nilai tanggalwaktu . | Aplikasi yang dibangun dengan Driver OLE DB untuk SQL Server yang tersambung ke server SQL Server 2005 akan memotong detik dan detik pecahan untuk bagian waktu data yang dikirim ke server jika Anda mengikat ke kolom tanggalwaktu dengan pengidentifikasi jenis DBTYPE_DBTIMESTAMP (OLE DB) atau SQL_TIMESTAMP (ODBC) dan skala 0. Contohnya: Data input: 1994-08-21 21:21:36.000 Data yang disisipkan: 1994-08-21 21:21:00.000 |
Konversi data OLE DB dari DBTYPE_DBTIME ke DBTYPE_DATE tidak lagi dapat menyebabkan hari berubah. | Sebelum SQL Server Native Client 10.0, jika bagian waktu DBTYPE_DATE dalam setengah detik tengah malam, kode konversi OLE DB menyebabkan hari berubah. Di Driver OLE DB untuk SQL Server, hari tidak akan berubah (detik pecahan dipotong dan tidak dibulatkan). |
Perubahan konversi IBCPSession::BCColFmt. | Di Driver OLE DB untuk SQL Server, ketika Anda menggunakan IBCPSession::BCOColFmt untuk mengonversi SQLDATETIME atau SQLDATETIME ke jenis string, nilai pecahan diekspor. Misalnya, saat mengonversi jenis SQLDATETIME untuk mengetik SQLNVARCHARMAX, versi sebelum SQL Server Native Client 10.0 dikembalikan 1989-02-01 00:00:00. Driver OLE DB untuk SQL Server kembali 1989-02-01 00:00:00.0000000. |
Aplikasi kustom yang menggunakan API BCP sekarang dapat melihat peringatan. | API BCP akan menghasilkan pesan peringatan jika panjang data lebih besar dari panjang yang ditentukan untuk bidang untuk semua jenis. Sebelumnya, peringatan ini hanya diberikan untuk jenis karakter, tetapi tidak akan dikeluarkan untuk semua jenis. |
Menyisipkan string kosong ke dalam sql_variant terikat sebagai jenis tanggal/waktu menghasilkan kesalahan. | Di SQL Server Native Client 9.0, memasukkan string kosong ke dalam sql_variant terikat sebagai jenis tanggal/waktu tidak menghasilkan kesalahan. Driver OLE DB untuk SQL Server menghasilkan kesalahan dalam situasi ini dengan benar. |
SQL Server mungkin mengembalikan hasil yang berbeda saat pemicu berjalan. | Perubahan yang diperkenalkan di SQL Server 2008 (10.0.x) dapat menyebabkan aplikasi memiliki hasil yang berbeda yang dikembalikan dari pernyataan yang menyebabkan pemicu berjalan ketika NOCOUNT OFF berlaku. Dalam situasi ini, aplikasi Anda mungkin menghasilkan kesalahan. Untuk mengatasi kesalahan ini, atur NOCOUNT ON di pemicu. |