KB3030619 - PERBAIKI: Data yang salah yang ditampilkan saat Anda mengkueri kolom DATE di SQL Server 2014

Berlaku Untuk
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Web - duplicate (do not use)

Gejala

Asumsikan Anda memiliki tabel yang berisi kolom tipe data DATE, dan Anda telah menerapkan Indeks Penyimpanan Kolom Berkluster (CCSI) pada tabel ini di Microsoft SQL Server 2014. Ketika Anda mencoba mengkueri tabel menggunakan tipe data DATE sebagai pemberi kualifikasi, data yang salah mungkin akan dikembalikan.

Misalnya:buat tabel tab2
(C1 Int, C2 Date, C3 Varchar(10))

BUAT INDEKS PENYIMPAN KOLOM BERKLUSTER [CCI_tab2] AKTIF [TAB2] DENGAN (DROP_EXISTING = NONAKTIF)
GO

Pilih *
DARI tab2 S -- Tabel dengan indeks penyimpan kolom berkluster
WHERE S.c2 = @date -- variabel tipe data Tanggal

Resolusi

Informasi paket layanan

Untuk mengatasi masalah ini, dapatkan Paket Layanan 1 untuk SQL Server 2014.

Untuk informasi selengkapnya tentang SQL Server 2014 Paket Layanan 1 (SP1), lihat bug yang diperbaiki di SQL Server 2014 Paket Layanan 1 .

Informasi Pembaruan Kumulatif

Masalah ini pertama kali diperbaiki dalam pembaruan kumulatif SQL Server berikut.

          

Rekomendasi: Menginstal pembaruan kumulatif terbaru untuk SQL Server

Setiap pembaruan kumulatif baru untuk SQL Server berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan pembaruan kumulatif sebelumnya. Lihat pembaruan kumulatif terbaru untuk SQL Server:

      

Informasi Selengkapnya

Gunakan kode berikut untuk mereproduksi masalah ini:buat tabel tab1
(C1 INT, tanggal C2)

Sisipkan ke tab1
nilai (1 , '2000-01-01')

MEMBUAT INDEKS TIDAK BERKLUSTER [idxtab1c2] PADA TAB1
(
       c2 ASC
)
DENGAN (PAD_INDEX = NONAKTIF, STATISTICS_NORECOMPUTE = NONAKTIF, SORT_IN_TEMPDB = NONAKTIF, DROP_EXISTING = NONAKTIF, ONLINE = NONAKTIF, ALLOW_ROW_LOCKS = AKTIF, ALLOW_PAGE_LOCKS = AKTIF)

Buat tabel tab2
(C1 Int, C2 Date, C3 Varchar(10))

Sisipkan ke Tab2
nilai (1, '2000-01-01', 'tes')

BUAT INDEKS PENYIMPAN KOLOM BERKLUSTER [CCI_tab2] AKTIF [TAB2] DENGAN (DROP_EXISTING = NONAKTIF)
GO

Membuat tabel T
([runId] int bukan null, [scalingFactor] mengambang bukan null)

-- KUERI REPRO. Batch di bawah ini diharapkan akan mengembalikan baris, tetapi kami tidak mendapatkannya
Memotong tabel T
NYATAKAN @date TANGGAL, @numDates INT

SISIPKAN KE DALAM NILAI T(1, 1)
NYATAKAN @date TANGGAL, @numDates INT
SELECT @date = max(R.c2) , @numDates = COUNT(berbeda R.c2)
DARI TAB1 R
GABUNGAN DALAM t D PADA R.c1 = D.runId

Pilih *
DARI tab2 S -- CCI
WHERE S.c2 = @date

Status

Microsoft telah mengonfirmasi bahwa ini adalah masalah dalam produk Microsoft sebagaimana tercantum di bagian "Berlaku untuk".