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.