Microsoft mendistribusikan perbaikan Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) sebagai satu file yang dapat diunduh. Karena perbaikan bersifat kumulatif, setiap Edaran baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2008 R2 Service Pack 1 (SP1) sebelumnya.
Gejala
Pertimbangkan skenario berikut:
-
Anda memiliki kolom tipe data datetimeoffset dalam tabel di Microsoft sql server 2008 R2 atau di Microsoft sql server 2012.
-
Anda membuat indeks pada kolom datetimeoffset .
-
Anda mengonversi tipe data datetimeoffset menjadi tipe data smalldatetime dengan menggunakan fungsi cast atau Convert tanpa argumen gaya , atau ketika nilai argumen gaya adalah 0.
-
Hasil dari fungsi cast atau Convert digunakan dalam filter dalam kueri Transact-SQL.
-
Anda menjalankan kueri Transact-SQL.
Dalam skenario ini, hasil yang dikembalikan oleh kueri tidak benar karena filter tidak berfungsi dengan benar. Misalnya, asumsikan kolom datetimeoffset yang bernama "tanggal" berisi nilai berikut ini:
-
2011-05-21 23:00:00 -01:00
-
2011-05-21 23:00:00 +00:00
-
2011-05-21 23:00:00 +01:00
Anda menjalankan kueri berikut ini:
SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'
Hasil kueri mengembalikan satu baris saja. Namun, hasil yang diharapkan akan mengembalikan baris untuk ketiga nilai tersebut.
Pemecahan Masalah
Informasi pembaruan kumulatif
SQL Server 2012
Perbaikan untuk masalah ini pertama kali dirilis dalam pembaruan kumulatif 3 untuk SQL Server 2012. Untuk informasi selengkapnya tentang paket pembaruan kumulatif ini, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:
2723749 Paket pembaruan kumulatif 3 untuk SQL Server 2012Catatan Karena Build bersifat kumulatif, setiap rilis perbaikan baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2012 sebelumnya. Microsoft menganjurkan agar Anda mempertimbangkan penerapan rilis perbaikan terbaru yang berisi hotfix ini. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
2692828 Build 2012 SQL Server yang dirilis setelah SQL Server 2012 dirilis Anda harus menerapkan hotfix SQL Server 2012 ke instalasi SQL Server 2012.
SQL Server 2008 R2 Paket Layanan 2
Perbaikan untuk masalah ini pertama kali dirilis dalam pembaruan kumulatif 1 untuk SQL Server 2008 R2 Service Pack 2. Untuk informasi selengkapnya tentang cara mendapatkan paket pembaruan kumulatif ini, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:
2720425 Paket pembaruan kumulatif 1 untuk SQL Server 2008 R2 Service Pack 2Catatan Karena Build bersifat kumulatif, setiap rilis perbaikan baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2008 R2 sebelumnya. Kami menyarankan agar Anda mempertimbangkan untuk menerapkan rilis perbaikan terbaru yang berisi hotfix ini. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
2730301 Build SQL Server 2008 R2 yang dirilis setelah SQL Server 2008 R2 Service Pack 2 dirilis
SQL Server 2008 R2 SP1
Perbaikan untuk masalah ini pertama kali dirilis dalam pembaruan kumulatif 7. Untuk informasi selengkapnya tentang cara mendapatkan paket pembaruan kumulatif ini untuk SQL Server 2008 R2 Service Pack 1, klik nomor artikel berikut ini untuk menampilkan artikel di Basis Pengetahuan Microsoft:
2703282 Paket pembaruan kumulatif 7 untuk SQL Server 2008 R2 SP1Catatan Karena Build bersifat kumulatif, setiap edaran perbaikan baru berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan rilis perbaikan SQL Server 2008 R2 Service Pack 1 sebelumnya. Kami menyarankan agar Anda mempertimbangkan untuk menerapkan rilis perbaikan terbaru yang berisi hotfix ini. Untuk informasi selengkapnya, klik nomor artikel berikut untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
2567616 Build SQL Server 2008 R2 yang dirilis setelah SQL Server 2008 R2 SP1 dirilis
Informasi Selengkapnya
Untuk mereproduksi masalah, ikuti langkah-langkah berikut:
-
Jalankan kueri berikut ini untuk membuat tabel dengan kolom datetimeoffset dan untuk menyisipkan beberapa catatan:CREATE TABLE #TestTimeZones (dto datetimeoffset(0)); GO INSERT INTO #TestTimeZones(dto) VALUES ('2011-05-21 23:00:00 -01:00'), ('2011-05-21 23:00:00 +00:00'), ('2011-05-21 23:00:00 +01:00'); GO
-
Jalankan kueri berikut ini, dan Anda bisa melihat bahwa ketiga nilai dicantumkan dengan benar di hasil yang dikembalikan:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;
-
Jalankan kueri berikut ini untuk membuat indeks pada kolom "DTO" dan untuk mengulangi kueri yang sama:CREATE INDEX IX_testTimeZones_Dto ON #TestTimeZones(dto); GO -- Repeat the same query DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withIndex FROM #TestTimeZones WHERE CAST(dto A smalldatetime)=@t; GO
-
Jalankan kueri dalam langkah 2 lagi. Kali ini, kueri mengembalikan satu baris saja.
-
Jalankan kueri berikut ini untuk menghapus indeks dan tabel yang Anda buat:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO
Referensi
Untuk informasi selengkapnya tentang fungsi CAST dan konversi, kunjungi situs web MSDN berikut:
Informasi umum tentang fungsi CAST dan konversi di SQL Server
Status
Microsoft telah mengonfirmasi bahwa ini adalah masalah pada produk Microsoft yang tercantum di bagian "Berlaku untuk".