FIX: 當您在資料表上執行 INSERT SELECT 陳述式時,SQL Server 2008 中的錯誤訊息: 「 PRIMARY KEY 條件約束 '<primarykey>' 違規。無法在物件 '<tablename>' 中插入重複的索引鍵 」

文章翻譯 文章翻譯
文章編號: 970507 - 檢視此文章適用的產品。
Microsoft 為一個可下載檔案散佈 Microsoft SQL Server 2008 的修正程式。因為修正程式是累積,每個新版本包含所有 Hotfix 及先前的 SQL Server 2008 隨附所有安全性修正程式都修正發行。
全部展開 | 全部摺疊

在此頁中

徵狀

考慮下列案例:
  • 您有多處理器電腦上安裝 Microsoft SQL Server 2008。
  • 包含主索引鍵的資料表上有的 INSERT SELECT 陳述式。

    附註INSERT SELECT] 陳述接收資料的資料表會是同一個輸出資料的資料表。例如:
    INSERT T1 … SELECT T1
  • 參考此 INSERT SELECT 陳述式中的其他資料表。這些參考包含暫存資料表。

    附註FROM] 子句中所參考的資料表或資料表參考子查詢或聯結條件中。
您在執行陳述式時您會收到下列錯誤訊息:

訊息 2627年、 層級 14、 狀態 1
PRIMARY KEY 條件約束 'PrimaryKey' 違規。無法在物件 'TableName' 中插入重複的索引鍵。

如果您檢查執行計劃時,您尋找執行平行 JOIN 運算子和 熱多工緩衝 運算子。這個 熱多工緩衝 運算子是在 JOIN 運算子之下。此外,陳述式中接收資料的資料表是聯結的內部資料表。

附註在執行 UPDATE SELECT 陳述式或 DELETE SELECT 陳述式時,也會發生這個問題。

發生的原因

這個問題發生是因為中 「 多工緩衝處理錯誤 熱多工緩衝處理 運算子的 「 多工緩衝處理要會產生比預期更多的資料列。這種行為造成重複的關鍵問題。

解決方案

累積更新資訊

這個問題的修正程式先於累計更新 3 的 SQL Server 2008 Service Pack 1 發行。如更多有關此累積更新套件,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
971491SQL Server 2008 Service Pack 1 的累積更新套件 3
附註因為組建是累計,每個新的修正程式版本包含所有 Hotfix 及先前的 SQL Server 2008 隨附所有安全性修正程式都修正版本。Microsoft 建議您考慮安裝最新的修正程式發行版本包含此 Hotfix。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
970365SQL 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。

Hotfix 資訊

一個支援的 Hotfix 現在已可從 Microsoft取得。不過,它只修正本文中所述此問題。請只在發生此特定問題的系統上套用。此 Hotfix 可能會接受其他測試。因此,如果您不會嚴重影響這個問題,我們建議您等候下一個的 SQL Server 2008 Service Pack 包含此 Hotfix。

如果要立即解決這個問題,請聯絡 Microsoft 客戶支援服務 」,以取得該 Hotfix。如需 Microsoft 客戶支援服務電話號碼及支援成本的相關資訊的完整清單,請造訪下列 Microsoft 網站]:
http://support.microsoft.com/contactus/?ws=support
附註 在特殊情況下通常會因支援電話所產生的費用可能就不收取如果 Microsoft 支援人員認為某特定更新程式可以解決您的問題。平常的支援成本將會套用到其他支援問題是所做不限定特定有問題的更新程式。

必要條件

若要將這個 Hotfix,您必須執行 SQL Server 2008 Service Pack 1 (SP1) 的電腦。

重新啟動資訊

您沒有套用此 Hotfix 之後重新啟動電腦。

登錄資訊

您沒有變更登錄。

Hotfix 檔案資訊

此 Hotfix 包含只需修正本文所列問題的那些檔案。此 Hotfix 並未包含必須將產品完整更新至最新版組建的所有檔案。

此 Hotfix 的英文版在檔案屬性 (或更新版本的檔案屬性) 如下列表格中所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。當您檢視檔案資訊時,會將它轉換為當地時間。若要到 UTC 與當地時間差異使用在 [日期及時間 中項目控制台中的 [時區] 索引標籤]。
所有支援 x x86 為主的 SQL Server 2008 資料庫引擎的版本
摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Sqlaccess.dll2007.100.2712.0405,35213 五月 200917: 53x86
Keyfile.dll2007.100.2712.013,65613 五月 200915: 37x86
Sqlservr.exe2007.100.2712.042,729,32013 五月 200917: 56x86
所有支援 x x86 版本的 SQL Server 2008 分析服務
摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Msmdlocal.dll10.0.2712.023,461,72013 五月 200916: 08x86
Msmdsrv.exe10.0.2712.021,955,41613 五月 200916: 09x86
Keyfile.dll2007.100.2712.013,65613 五月 200915: 37x86
Msmdpump.dll10.0.2712.06,180,69613 五月 200916: 08x86
Msmdspdm.dll10.0.2712.0178,00813 五月 200916: 08x86
Msmgdsrv.dll10.0.2712.08,558,93613 五月 200916: 09x86
Msolap100.dll10.0.2712.06,532,95213 五月 200916: 09x86
所有支援 x x64 版本的 SQL Server 2008 資料庫引擎
摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Sqlaccess.dll2007.100.2712.0412,00814 五月 200901: 15x86
Keyfile.dll2007.100.2712.014,18413 五月 200923: 55x64
Sqlservr.exe2007.100.2712.057,873,25614 五月 200901: 17x64
所有支援 x x64 版本的 SQL Server 2008 分析服務
摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Msmdlocal.dll10.0.2712.023,461,72013 五月 200916: 08x86
Msmdlocal.dll10.0.2712.044,436,82414 五月 200900: 10x64
Msmdsrv.exe10.0.2712.043,713,36814 五月 200900: 10x64
Keyfile.dll2007.100.2712.014,18413 五月 200923: 55x64
Msmdpump.dll10.0.2712.07,430,48814 五月 200900: 10x64
Msmdspdm.dll10.0.2712.0178,02414 五月 200900: 10x86
Msmgdsrv.dll10.0.2712.08,558,93613 五月 200916: 09x86
Msmgdsrv.dll10.0.2712.012,332,37614 五月 200900: 11x64
Msolap100.dll10.0.2712.06,532,95213 五月 200916: 09x86
Msolap100.dll10.0.2712.08,153,94414 五月 200900: 11x64
所有支援的 SQL Server 2008 資料庫引擎的 Itanium 架構版本
摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Sqlaccess.dll2007.100.2712.0398,69613 五月 200917: 01x86
Keyfile.dll2007.100.2712.019,30413 五月 200915: 26IA 64
Sqlservr.exe2007.100.2712.0111,042,40813 五月 200917: 08IA 64
所有支援的 SQL Server 2008 分析服務的 Itanium 架構版本
摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Msmdlocal.dll10.0.2712.023,461,72013 五月 200916: 08x86
Msmdlocal.dll10.0.2712.057,508,18413 五月 200915: 44IA 64
Msmdsrv.exe10.0.2712.058,860,88813 五月 200915: 46IA 64
Keyfile.dll2007.100.2712.019,30413 五月 200915: 26IA 64
Msmdpump.dll10.0.2712.08,943,44813 五月 200915: 45IA 64
Msmdspdm.dll10.0.2712.0178,00813 五月 200915: 45x86
Msmgdsrv.dll10.0.2712.015,485,80013 五月 200915: 47IA 64
Msmgdsrv.dll10.0.2712.08,558,93613 五月 200916: 09x86
Msolap100.dll10.0.2712.010,065,24013 五月 200915: 47IA 64
Msolap100.dll10.0.2712.06,532,95213 五月 200916: 09x86

其他可行方案

如果要解決這個問題,MAXDOP 查詢提示或 MAXDOP 選項要設定為在陳述式或伺服器層級 1

附註伺服器層級 MAXDOP 選項會影響在伺服器執行的所有查詢的效能。

狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。

?考

如更多有關累加式的維修模型為 SQL Server,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
935897累加式的維修模型是可以從 SQL Server 小組來傳遞回報問題的 Hotfix


如 SQL Server 更新命名的結構描述的更多有關,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
822499Microsoft SQL Server 軟體更新套件的新命名結構描述


如需有關軟體更新術語的詳細資訊,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
824684用來描述 Microsoft 軟體更新標準術語的說明

屬性

文章編號: 970507 - 上次校閱: 2009年7月24日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Workgroup
關鍵字:?
kbmt kbsurveynew kbfix kbqfe kbexpertiseadvanced kbhotfixserver KB970507 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:970507
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com