Microsoft 將 Microsoft SQL Server 2008 R2 Service Pack 2 (SP2)修正為一個可下載的檔案。 因為修正程式是累加的,所以每個新版本都包含舊版 SQL Server 2008 R2 Service Pack 2 (修正版本)所包含的所有修復程式及所有安全性修正程式。
徵狀
當您在 Microsoft SQL Server 2008 R2 SP2 或 Microsoft SQL Server 2012 中執行查詢時,如果下列情況屬實,您可能會收到不正確的結果:
-
此查詢會在完整的 JOIN子句結果中使用一個交叉 APPLY子句。
-
資料表資料是透過在 完整的 JOIN 子句中呼叫表格值的使用者定義函數來提供。
-
此函數接受資料行名稱做為參數,並以資料表的形式傳回結果。
例如,執行如下所示的查詢:
SELECT * FROM tablename CROSS APPLY ( SELECT * FROM (SELECT * FROM [dbo].[func_GetTableFromXml](xmlColumn) WHERE nodeParentName = 'New') s1 FULL JOIN (SELECT * FROM [dbo].[func_GetTableFromXml](xmlColumn) WHERE nodeParentName = 'Old') s2 ON s1.nodeName = s2.nodeName ) s
注意: 這個問題不會發生在 Microsoft SQL Server 2012。
解決方案
累積更新資訊
SQL Server 2012 累積更新7
此問題的修正程式是在累積更新7中第一次發行。如需如何取得此 SQL Server 2012 累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
2823247 SQL Server 2012 的累積更新套件7注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2012 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
2692828 在發行 SQL Server 2012 之後發行的 SQL Server 2012 組建
SQL Server 2012 SP1 的累積更新3
此問題的修正程式是在累積更新3中第一次發行。如需有關如何取得 SQL Server 2012 SP1 累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
2812412 SQL Server 2012 的累積更新套件 3 Service Pack 1注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2012 SP1 修正版本中所包含的所有修復程式及所有安全修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
2772858 在發行 SQL Server 2012 Service Pack 1 之後發行的 SQL Server 2012 組建
SQL Server 2008 R2 SP2 累積更新5
此問題的修正程式是在累積更新5中第一次發行。如需如何取得適用于 SQL Server 2008 R2 SP 2 之累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:
2797460 SQL Server 2008 R2 Service Pack 2 的累積更新套件5注意: 因為組建是累加的,所以每個新的修正版本都包含先前 SQL Server 2008 R2 SP 2 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
2730301 在發行 SQL Server 2008 R2 Service Pack 2 之後發行的 SQL Server 2008 R2 組建
狀態
Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。
因應措施
若要解決此問題,請使用 完整的 MERGE join 子句,而不是 完整的 JOIN 子句。例如,您變更「症狀」一節中所提及的查詢,以使其類似以下所示:
SELECT * FROM tablename CROSS APPLY ( SELECT * FROM (SELECT * FROM [dbo].[func_GetTableFromXml](xmlColumn) WHERE nodeParentName = 'New') s1 FULL MERGE JOIN (SELECT * FROM [dbo].[func_GetTableFromXml](xmlColumn) WHERE nodeParentName = 'Old') s2 ON s1.nodeName = s2.nodeName ) s
其他相關資訊
如需如何使用 交叉 套用子句的詳細資訊,請移至下列 Microsoft TechNet 網站: