Microsoft distribueert Microsoft SQL Server 2008 R2 Service Pack 1 (SP1)-oplossingen als één downloadbaar bestand. Aangezien de fixes cumulatief zijn, bevat elke nieuwe release alle hotfixes en alle beveiligingsoplossingen die zijn opgenomen in de vorige versie van SQL Server 2008 R2 Service Pack 1 (SP1).
Symptomen
Neem het volgende scenario:
-
U hebt een kolom Time offset -gegevenstype in een tabel in Microsoft sql server 2008 R2 of in Microsoft sql server 2012.
-
U maakt een index voor de kolom datetimeoffset .
-
U kunt het gegevenstype Time offset niet converteren naar een smalldatetime -gegevenstype met de functie cast of converteren zonder het argument Style of als de waarde van het argument stijl0is.
-
Het resultaat van de functie cast of Convert wordt gebruikt in een filter in een Transact-SQL-query.
-
U voert de Transact-SQL-query uit.
In dit scenario is het resultaat van de query onjuist omdat het filter niet goed werkt. Stel dat de kolom date time date met de naam ' datum ' bijvoorbeeld de volgende waarden bevat:
-
2011-05-21 23:00:00 -01:00
-
2011-05-21 23:00:00 +00:00
-
2011-05-21 23:00:00 +01:00
Voer de volgende query uit:
SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'
Het resultaat van de query geeft slechts één rij als resultaat. Het verwachte resultaat moet echter wel rijen voor alle drie de waarden retourneren.
Oplossing
Cumulatieve updategegevens
SQL Server 2012
De oplossing voor dit probleem werd voor het eerst uitgebracht in de cumulatieve update 3 voor SQL Server 2012. Klik voor meer informatie over dit cumulatieve updatepakket op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:
2723749 Cumulatief updatepakket 3 voor SQL Server 2012Opmerking Aangezien de builds cumulatief zijn, bevat elke nieuwe correctie release alle hotfixes en alle beveiligingsoplossingen die zijn opgenomen in de vorige versie van SQL Server 2012 fix. Microsoft raadt u aan dat u de meest recente reparatie versie met deze hotfix toepast. Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie:
2692828 De versies van SQL Server 2012 die zijn uitgebracht na de release van SQL Server 2012 U moet een hotfix voor SQL Server 2012 toepassen op een installatie van SQL Server 2012.
SQL Server 2008 R2 Service Pack 2
De oplossing voor dit probleem werd voor het eerst uitgebracht in de cumulatieve update 1 voor SQL Server 2008 R2 Service Pack 2. Als u meer informatie wilt over het verkrijgen van dit cumulatieve updatepakket, klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:
2720425 Cumulatief update pakket 1 voor SQL Server 2008 R2 Service Pack 2Opmerking Aangezien de builds cumulatief zijn, bevat elke nieuwe correctie release alle hotfixes en alle beveiligingsoplossingen die zijn opgenomen in de vorige versie van SQL Server 2008 R2 correctie. U wordt aangeraden om de meest recente correctie voor deze hotfix toe te passen. Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie:
2730301 De SQL Server 2008 R2-builds die zijn uitgebracht na SQL Server 2008 R2 Service Pack 2 is uitgebracht
SQL Server 2008 R2 SP1
De oplossing voor dit probleem werd voor het eerst uitgebracht in cumulatieve update 7. Als u meer informatie wilt over het verkrijgen van dit cumulatieve updatepakket voor SQL Server 2008 R2 Service Pack 1, klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:
2703282 Cumulatief updatepakket 7 voor SQL Server 2008 R2 SP1Opmerking Aangezien de builds cumulatief zijn, bevat elke nieuwe correctie release alle hotfixes en alle beveiligingsoplossingen die zijn opgenomen in de vorige SQL Server 2008 R2 Service Pack 1 fix release. U wordt aangeraden om de meest recente correctie voor deze hotfix toe te passen. Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie:
2567616 De SQL Server 2008 R2-builds die zijn uitgebracht na de release van SQL Server 2008 R2 SP1
Meer informatie
Voer de volgende stappen uit om het probleem te reproduceren:
-
Voer de volgende query uit om een tabel te maken met een date time kolom en om bepaalde records in te voegen: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
-
Voer de volgende query uit en u ziet dat alle drie waarden correct worden weergegeven in het resultaat resultaat:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;
-
Voer de volgende query uit om een index te maken van de kolom ' DTO ' en om dezelfde query te herhalen: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
-
Voer de query opnieuw uit in stap 2. Deze keer geeft de query slechts één rij als resultaat.
-
Voer de volgende query uit om de index en de tabel die u hebt gemaakt, te verwijderen:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO
Verwijzingen
Ga naar de volgende MSDN-website voor meer informatie over de functies CAST en converteren:
Algemene informatie over de functies CAST en converteren in SQL Server
Status
Microsoft heeft bevestigd dat dit probleem zich kan voordoen in de Microsoft-producten die worden vermeld in de sectie Van toepassing op.