KB2481274-FIX: een query waarin de functie DATEDIFF wordt gebruikt, kan traag worden uitgevoerd in SQL Server 2005 of in SQL Server 2008 of in SQL Server 2008 R2

Microsoft distribueert Microsoft SQL Server 2005 of Microsoft SQL Server 2008 of SQL 2008 R2, als één downloadbaar bestand. Aangezien de fixes cumulatief zijn, bevat elke nieuwe versie alle hotfixes en alle beveiligingsoplossingen die zijn opgenomen in de vorige Microsoft SQL Server 2005 of Microsoft SQL Server 2008 of SQL 2008 R2 fix release

Symptomen

Ga ervan uit dat u een query uitvoert op een exemplaar van Microsoft SQL Server 2005 of Microsoft SQL Server 2008 of Microsoft SQL Server 2008 R2 en aan de volgende voorwaarden voldoet:

  • De query bevat een relationele operator. Bijvoorbeeld de operator minder dan (<).

  • Er is een DATEDIFF -functie in de operand van de relationele operator.

In deze situatie kan SQL Server een suboptimale query planning selecteren om deze query uit te voeren. Daarom kan de query traag worden uitgevoerd.

Oorzaak

Dit probleem doet zich voor omdat de SQL Server Optimizer de hoeveelheid rijen die wordt geretourneerd, onderschat wanneer u de functie DATEDIFF gebruikt.

Oplossing

Cumulatieve updategegevens

SQL Server 2005 Service Pack 3

De oplossing voor dit probleem werd voor het eerst uitgebracht in cumulatieve update 15 voor SQL Server 2005 Service Pack 3. Klik voor meer informatie over dit cumulatieve updatepakket op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

2507766 Cumulatief updatepakket 15 voor SQL Server 2005 Service Pack 3Opmerking 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 2005 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:

960598 De versies van SQL Server 2005 die na SQL Server 2005 Service Pack 3 zijn uitgebracht Hotfixes voor Microsoft SQL Server 2005 worden gemaakt voor specifieke SQL Server-servicepakketten. U moet een hotfix SQL Server 2005 Service Pack 3 toepassen op een installatie van SQL Server 2005 Service Pack 3. Standaard is de hotfix van een SQL Server-servicepakket opgenomen in het volgende SQL Server-servicepakket.

SQL Server 2005 Service Pack 4

De oplossing voor dit probleem werd voor het eerst uitgebracht in cumulatieve update 2 voor SQL Server 2005 Service Pack 4. Klik voor meer informatie over dit cumulatieve updatepakket op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

2489409 Cumulatief updatepakket 2 voor SQL Server 2005 Service Pack 4Opmerking 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 2005 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:

2485757 De versies van SQL Server 2005 die na SQL Server 2005 Service Pack 4 zijn uitgebracht Hotfixes voor Microsoft SQL Server 2005 worden gemaakt voor specifieke SQL Server-servicepakketten. U moet een hotfix SQL Server 2005 Service Pack 4 toepassen op een installatie van SQL Server 2005 Service Pack 4. Standaard is de hotfix van een SQL Server-servicepakket opgenomen in het volgende SQL Server-servicepakket.

SQL Server 2008 Service Pack 1

De oplossing voor dit probleem werd voor het eerst uitgebracht in de cumulatieve update 13 voor SQL Server 2008 Service Pack 1. Klik voor meer informatie over dit cumulatieve updatepakket op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

2497673 Cumulatief updatepakket 13 voor SQL Server 2008 Service Pack 1Opmerking 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 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:

970365 De versies van SQL Server 2008 die zijn uitgebracht na SQL Server 2008 Service Pack 1, zijn uitgebracht Hotfixes voor Microsoft SQL Server 2008 worden gemaakt voor specifieke SQL Server-servicepakketten. U moet een hotfix SQL Server 2008 Service Pack 1 toepassen op een installatie van SQL Server 2008 Service Pack 1. Standaard is de hotfix van een SQL Server-servicepakket opgenomen in het volgende SQL Server-servicepakket.

SQL Server 2008 Service Pack 2

De oplossing voor dit probleem werd voor het eerst uitgebracht in de cumulatieve update 3 voor SQL Server 2008 Service Pack 2. Klik voor meer informatie over dit cumulatieve updatepakket op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

2498535 Cumulatief updatepakket 3 voor SQL Server 2008 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 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:

2402659 De versies van SQL Server 2008 die na SQL Server 2008 Service Pack 2 zijn uitgebracht Hotfixes voor Microsoft SQL Server 2008 worden gemaakt voor specifieke SQL Server-servicepakketten. U moet een hotfix voor SQL Server 2008 Service Pack 2 toepassen op een installatie van SQL Server 2008 Service Pack 2. Standaard is de hotfix van een SQL Server-servicepakket opgenomen in het volgende SQL Server-servicepakket.

SQL Server 2008 R2 Service Pack 1

De oplossing voor dit probleem werd voor het eerst uitgebracht in de cumulatieve update 1 voor SQL Server 2008 R2 Service Pack 1. 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:

2544793 Cumulatief update pakket 1 voor SQL Server 2008 R2 Service Pack 1Opmerking 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:

2567616 De SQL Server 2008 R2-builds die zijn uitgebracht na SQL Server 2008 R2 Service Pack 1 is uitgebracht

SQL Server 2008 R2

De oplossing voor dit probleem werd voor het eerst uitgebracht in cumulatieve update 7. Voor meer informatie over het verkrijgen van dit cumulatieve updatepakket voor SQL Server 2008 R2 klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

2507770 Cumulatief update pakket 7 voor SQL Server 2008 R2 Opmerking 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:

981356 De SQL Server 2008 R2-builds die zijn uitgebracht nadat SQL Server 2008 R2 werd uitgebracht

Status

Microsoft heeft bevestigd dat dit probleem zich kan voordoen in de Microsoft-producten die worden vermeld in de sectie Van toepassing op.

Workaround

U kunt dit probleem omzeilen door de query opnieuw te schrijven, zodat het queryplan de functie DATEDIFF niet gebruikt in predikaten. Het volgende kan bijvoorbeeld traag worden uitgevoerd:create procedure proc_test @date datetimeasselect COUNT (*) from t where c1 <DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) U kunt de query echter als volgt opnieuw schrijven om het probleem te omzeilen:create procedure proc_test2 @date datetimeasdeclare @datestr nvarchar(50), @sqlstr nvarchar(1024)set @datestr = CAST (DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) as nvarchar(50))set @sqlstr ='select COUNT (*) from t where c1 < ''' + @datestr + ''''exec (@sqlstr)

Verwijzingen

Als u meer informatie wilt over het incremental service model voor SQL Server, klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

935897 Een incrementeel service model is beschikbaar in het SQL Server-team om hotfixes te leveren voor gerapporteerde problemenKlik voor meer informatie over het naamgevingsschema voor SQL Server-updates op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

822499 Nieuw naam schema voor updatepakketten voor Microsoft SQL Server-softwareKlik voor meer informatie over de terminologie van software-updates op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

824684 Beschrijving van de standaardterminologie die wordt gebruikt voor het beschrijven van Microsoft-software-updates

Meer hulp nodig?

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Microsoft insiders

Was deze informatie nuttig?

Bedankt voor uw feedback.

Hartelijk dank voor uw feedback! Het lijkt ons een goed idee om u in contact te brengen met een van onze Office-ondersteuningsagenten.

×