Problembeschreibung
Angenommen, Sie verfügen über eine Tabelle, die eine Date -Datentypspalte enthält, und Sie haben den gruppierten Spalten Speicher Index (CCSI) in dieser Tabelle in Microsoft SQL Server 2014 implementiert. Wenn Sie versuchen, die Tabelle abzufragen, indem Sie den Date -Datentyp als Qualifizierer verwenden, werden möglicherweise falsche Daten zurückgegeben. Zum Beispiel:create table tab2(c1 int, c2 date, c3 varchar(10)) CREATE CLUSTERED COLUMNSTORE INDEX [CCI_tab2] ON [tab2] WITH (DROP_EXISTING = OFF)GO select *FROM tab2 S -- Table with clustered columnstore indexWHERE S.c2 = @date -- variable of Date datatype
Fehlerbehebung
Service Pack-Informationen
Um dieses Problem zu beheben, besorgen Sie sich Service Pack 1 für SQL Server 2014.
Weitere Informationen zu SQL Server 2014 Service Pack 1 (SP1) finden Sie unter Fehler, die in SQL Server 2014 Service Pack 1 behoben wurden.
Informationen zur kumulativen Aktualisierung
Dieses Problem wurde zuerst im folgenden kumulativen Update von SQL Server behoben.
Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und alle Sicherheitsupdates, die im vorherigen kumulativen Update enthalten waren. Schauen 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 date) insert into tab1values (1 , '2000-01-01') CREATE NONCLUSTERED INDEX [idxtab1c2] ON tab1( c2 ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) create table tab2(c1 int, c2 date, c3 varchar(10)) insert into tab2values (1, '2000-01-01', 'test') CREATE CLUSTERED COLUMNSTORE INDEX [CCI_tab2] ON [tab2] WITH (DROP_EXISTING = OFF)GO create table t([runId] int not null, [scalingFactor] float not null) -- REPRO QUERY. Below batch is expected to return a row but we don’t get ittruncate table tDECLARE @date DATE, @numDates INT INSERT INTO t VALUES(1, 1)DECLARE @date DATE, @numDates INTSELECT @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 -- CCIWHERE S.c2 = @date
Status
Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt.