KB3030619 – FIX: Bei der Abfrage der Spalte "DATUM" in SQL Server 2014 wurden falsche Daten zurückgegeben

Gilt für
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)

Symptome

Angenommen, Sie verfügen über eine Tabelle, die eine Spalte mit dem Datentyp "DATE" enthält, und Sie haben den gruppierten Column Store-Index (CCSI) für diese Tabelle in Microsoft SQL Server 2014 implementiert. Wenn Sie versuchen, die Tabelle mithilfe des Datentyps DATE als Begrenzungszeichen abzufragen, werden möglicherweise falsche Daten zurückgegeben.

Beispiel:create table tab2
(C1 int, c2 date, c3 varchar(10))

GRUPPIERTEN COLUMNSTORE-INDEX ERSTELLEN [CCI_tab2] AUF [TAB2] MIT (DROP_EXISTING = AUS)
GO

select *
FROM tab2 S -- Tabelle mit gruppiertem Columnstore-Index
WHERE S.c2 = @date -- Variable des Datentyps "Datum"

Lösung

Informationen zum Service Pack

Installieren Sie Service Pack 1 für SQL Server 2014, um dieses Problem zu beheben.

Weitere Informationen zu SQL Server 2014 Service Pack 1 (SP1) finden Sie unter In SQL Server 2014 Service Pack 1 behobene Fehler.

Informationen zum kumulativen Update

Dieses Problem wurde erstmals im folgenden kumulativen Update von SQL Server behoben.

          

Empfehlung: Installieren des neuesten kumulativen Updates für SQL Server

Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:

      

Weitere Informationen

Verwenden Sie den folgenden Code, um dieses Problem zu reproduzieren:create table tab1
(C1 int, C2 Datum)

In Tab1 einfügen
values (1 , '2000-01-01')

ERSTELLEN EINES NICHT GRUPPIERTEN INDEXES [idxtab1c2] ON tab1
(
       c2 ASC
)
MIT (PAD_INDEX = AUS, STATISTICS_NORECOMPUTE = AUS, SORT_IN_TEMPDB = AUS, DROP_EXISTING = AUS, ONLINE = AUS, ALLOW_ROW_LOCKS = EIN, ALLOW_PAGE_LOCKS = EIN)

Tabelle erstellen Tab2
(C1 int, c2 date, c3 varchar(10))

In Tab2 einfügen
values (1, '2000-01-01', 'test')

GRUPPIERTEN COLUMNSTORE-INDEX ERSTELLEN [CCI_tab2] AUF [TAB2] MIT (DROP_EXISTING = AUS)
GO

Tabelle erstellen T
([runId] int not null, [scalingFactor] float not null)

-- REPRO-ABFRAGE. Es wird erwartet, dass der folgende Batch eine Zeile zurückgibt, aber wir erhalten sie nicht
truncate table t
DECLARATION @date DATE, @numDates INT

EINFÜGEN IN t WERTE(1, 1)
DECLARATION @date DATE, @numDates INT
SELECT @date = max(R.c2) , @numDates = COUNT(distinct R.c2)
FROM tab1 R
INNER JOIN t D ON R.c1 = D.runId

select *
FROM tab2 S -- CCI
WHERE S.c2 = @date

Status

Microsoft hat bestätigt, dass dies ein Problem bei den Microsoft-Produkten ist, die im Abschnitt „Gilt für“ aufgeführt sind.