您目前已離線,請等候您的網際網路重新連線

當您執行插入選取 UNION ALL 陳述式 SQL Server 2008年中修正: 不正確結果

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:2530921

Microsoft 為一個可下載檔案散佈 Microsoft SQL Server 2008 Service Pack 1 修正程式。修正程式是累積的因為每個新版本包含所有的 hotfix,所有安全性修正程式隨附於前一 SQL Server 2008 Service Pack 1 修正版本。
徵狀
當您執行 插入選取聯集全部 SQL Server 2008年中的陳述式,陳述式的結果可能不正確如果來源目錄 選取 子句用來作為的目標資料表 插入 子句。

例如,您執行下列陳述式來建立四個資料表:
CREATE TABLE [TabA] (M VARCHAR(20), W VARCHAR(20)) CREATE TABLE [TabB] (M VARCHAR(20), W VARCHAR(20), R VARCHAR(20)) CREATE TABLE [TabC] (P VARCHAR(6), M CHAR(20), A NUMERIC(13)) CREATE TABLE [TabD] (P VARCHAR(6), W VARCHAR(20), M VARCHAR(20), D NUMERIC(13), E DATETIME, F DATETIME)
您插入到某些值 TabA, TabBTabD 資料表,然後再執行下列 插入選取聯集全部 陳述式:

INSERT INTO [TabC] (P, M, A)SELECT T1.P,T1.M,T1.D / SUM(1) OVER(PARTITION BY P) FROM [TabD] T1 INNER JOIN [TabA] T2 ON (T1.M = T2.M AND T1.W = T2.W) WHERE NOT EXISTS (SELECT * FROM [TabC] E1 WHERE T1.P = E1.P) UNION ALLSELECT T1.P,T2.M,T1.D / SUM(1) OVER(PARTITION BY P) FROM [TabD] T1 INNER JOIN [TabB] T2 ON (T1.M = T2.R AND T1.W = T2.W) WHERE NOT EXISTS (SELECT * FROM [TabC] E1 WHERE T1.P = E1.P) GO
在這個案例中,您會收到不正確的結果,且某些記錄不正確地未插入 TabC 資料表。

解決方案

累積更新資訊

SQL Server 2008年服務套件 2

這個問題的修正程式首次發表累積更新 5] 中的 SQL Server 2008 Service Pack 2。如需有關此累積更新套件的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2555408 SQL Server 2008 Service Pack 2 的累積更新套件 5
附註 因為組建是累計的每個新的修正程式版本包含所有的 hotfix,所有安全性修正程式隨附於先前的 SQL Server 2008年修正版本。Microsoft 建議您考慮將套用最新的修正程式版本,其中包含此 hotfix。如需詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2402659 SQL Server 2008 SQL Server 2008 Service Pack 2 已於發行之後所發行的組建
Microsoft SQL Server 2008 hotfix 會建立特定的 SQL Server service pack。您必須將 SQL Server 2008 Service Pack 2 hotfix 套用至 SQL Server 2008 Service Pack 2 的安裝。預設情況下,SQL Server service pack 中提供任何 hotfix 包含在下一個 SQL Server service pack。

SQL Server 2008年服務套件 1 累積更新 14

這個問題的修正程式於第一次發行的累積更新 14 SQL Server 2008 Service Pack 1。如需有關此累積更新套件的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2527187 SQL Server 2008 Service Pack 1 的累積更新套件 14
附註 因為組建是累計的每個新的修正程式版本包含所有的 hotfix,所有安全性修正程式隨附於先前的 SQL Server 2008年修正版本。Microsoft 建議您考慮將套用最新的修正程式版本,其中包含此 hotfix。如需詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
970365 SQL Server 2008 SQL Server 2008 Service Pack 1 發行之後所發行的組建
Microsoft SQL Server 2008 hotfix 會建立特定的 SQL Server service pack。您必須將 SQL Server 2008 Service Pack 1 hotfix 套用至 SQL Server 2008 Service Pack 1 的安裝。預設情況下,SQL Server service pack 中提供任何 hotfix 包含在下一個 SQL Server service pack。
狀況說明
Microsoft 已確認這是在 「 Microsoft 產品資料 」 適用於 」 一節中所列的問題。

警告:本文為自動翻譯

內容

文章識別碼:2530921 - 最後檢閱時間:07/18/2011 20:26:00 - 修訂: 2.0

Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Web, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Express, Microsoft SQL Server 2008 Enterprise Evaluation, Microsoft SQL Server 2008 Express with Advanced Services, Microsoft SQL Server 2008 Standard Edition for Small Business

  • kbqfe kbexpertiseadvanced kbsurveynew kbfix kbmt KB2530921 KbMtzh
意見反應