Microsoft 將 Microsoft SQL Server 2005 或 Microsoft SQL Server 2008 或 SQL 2008 R2 修正為一個可下載的檔案。 因為修正程式是累加的,所以每個新版本都包含舊版 Microsoft SQL Server 2005 或 Microsoft SQL Server 2008 或 SQL 2008 R2 修正版本中所包含的所有修復程式及所有安全性修正程式。

徵狀

假設您在已滿足下列條件的 Microsoft SQL Server 2005 或 Microsoft SQL server 2008 或 Microsoft SQL Server 2008 R2 實例上執行查詢:

  • 查詢包含關聯式運算子。 例如,小於(<)運算子。

  • 在關聯式運算子的運算元中,有一個 DATEDIFF 函數。

在這種情況下,SQL Server 可能會選取一個不理想的查詢方案來執行此查詢。 因此,查詢的執行速度可能很慢。

原因

發生這個問題的原因是,當您使用 DATEDIFF 函數時,SQL Server 優化程式 underestimates 會傳回的列數。

解決方案

累積更新資訊

SQL Server 2005 Service Pack 3

此問題的修正程式會在 SQL Server 2005 Service Pack 3 的累積更新15中第一次發行。如需此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2507766 SQL Server 2005 的累積更新套件 15 Service Pack 3注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2005 修正版本中所包含的所有修復程式及所有安全性修正程式。 Microsoft 建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

960598 在發行 SQL Server 2005 Service Pack 3 之後發行的 SQL Server 2005 組建 Microsoft SQL Server 2005 修復程式是針對特定的 SQL Server service pack 建立的。 您必須將 SQL Server 2005 Service Pack 3 修復程式套用至 SQL Server 2005 Service Pack 3 的安裝。 根據預設,SQL Server service pack 中提供的任何熱修復程式都包含在下一個 SQL Server service pack 中。

SQL Server 2005 Service Pack 4

此問題的修正程式是在 SQL Server 2005 的累積更新2(Service Pack 4)中第一次發行。如需此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2489409 SQL Server 2005 的累積更新套件 2 Service Pack 4注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2005 修正版本中所包含的所有修復程式及所有安全性修正程式。 Microsoft 建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2485757 在發行 SQL Server 2005 Service Pack 4 之後發行的 SQL Server 2005 組建 Microsoft SQL Server 2005 修復程式是針對特定的 SQL Server service pack 建立的。 您必須將 SQL Server 2005 Service Pack 4 修復程式套用至 SQL Server 2005 Service Pack 4 的安裝。 根據預設,SQL Server service pack 中提供的任何熱修復程式都包含在下一個 SQL Server service pack 中。

SQL Server 2008 Service Pack 1

此問題的修正程式是在 SQL Server 2008 Service Pack 1 的累積式更新13中第一次發行。如需此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2497673 SQL Server 2008 Service Pack 1 的累積更新套件13注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 修正版本中所包含的所有修復程式及所有安全性修正程式。 Microsoft 建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

970365 在發行 SQL Server 2008 Service Pack 1 之後發行的 SQL Server 2008 組建 Microsoft SQL Server 2008 修復程式是針對特定的 SQL Server service pack 建立的。 您必須將 SQL Server 2008 Service Pack 1 修補程式套用至 SQL Server 2008 Service Pack 1 的安裝。 根據預設,SQL Server service pack 中提供的任何熱修復程式都包含在下一個 SQL Server service pack 中。

SQL Server 2008 Service Pack 2

此問題的修正程式是在 SQL Server 2008 的累積更新3(Service Pack 2)中第一次發行。如需此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2498535 SQL Server 2008 的累積更新套件 3 Service Pack 2注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 修正版本中所包含的所有修復程式及所有安全性修正程式。 Microsoft 建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2402659 在發行 SQL Server 2008 Service Pack 2 之後發行的 SQL Server 2008 組建 Microsoft SQL Server 2008 修復程式是針對特定的 SQL Server service pack 建立的。 您必須將 SQL Server 2008 Service Pack 2 修補程式套用至 SQL Server 2008 Service Pack 2 的安裝。 根據預設,SQL Server service pack 中提供的任何熱修復程式都包含在下一個 SQL Server service pack 中。

SQL Server 2008 R2 Service Pack 1

此問題的修正程式是在 SQL Server 2008 R2 Service Pack 1 的累積更新1中第一次發行。如需如何取得此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2544793 SQL Server 2008 R2 Service Pack 1 的累積更新套件1注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 R2 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2567616 在發行 SQL Server 2008 R2 Service Pack 1 之後發行的 SQL Server 2008 R2 組建

SQL Server 2008 R2

此問題的修正程式是在累積更新7中第一次發行。如需有關如何取得 SQL Server 2008 R2 累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2507770 SQL Server 2008 R2 的累積更新套件7 注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 R2 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

981356 在發行 SQL Server 2008 R2 之後發行的 SQL Server 2008 R2 組建

狀態

Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。

因應措施

若要解決此問題,請重新編寫查詢,使查詢方案不會在謂詞中使用 DATEDIFF 函數。 例如,下列程式可能會執行緩慢:create procedure proc_test @date datetimeasselect COUNT (*) from t where c1 <DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) 不過,您可以按照下列步驟來重寫查詢,以解決問題: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)

參考

如需有關 SQL Server 的增量服務模型的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

935897 您可以從 SQL Server 團隊取得增量服務模型,以提供已報告問題的修補程式如需 SQL Server 更新命名架構的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

822499 Microsoft SQL Server 軟體更新套件的新命名架構如需軟體更新術語的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

824684 描述 Microsoft 軟體更新所使用的標準術語說明

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×