首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2005

SQL Server 2005/2008 匯入匯出資料常見錯誤:無法插入身分識別欄位解決方法

     編輯:SQL Server 2005

錯誤現象

使用「SQL Server 匯入和匯出精靈」將資料從來源複製到目的地時,驗證階段失敗,錯誤訊息:

  • 錯誤 0xc0202049: 無法在唯讀欄位 "ID" 中插入資料。
  • 錯誤 0xc0202045: 驗證欄位中繼資料失敗。
  • 錯誤 0xc004706b: 元件 "目的地 - TableName" 驗證失敗,狀態 VS_ISBROKEN。
  • 錯誤 0xc004700c: 一或多個元件未通過驗證。
  • 錯誤 0xc0024107: 工作驗證期間發生錯誤。

核心原因:目的地資料表含 IDENTITY 欄位,預設不允許顯式插入值,精靈嘗試寫入來源的 ID 值導致驗證失敗。

解決方法(圖形介面)

  1. 在精靈「選擇來源資料表和檢視表」頁面,勾選需匯入的資料表。
  2. 點選該資料表右側的 「編輯對應...」 按鈕(或雙擊資料表列)。
  3. 在「資料行對應」對話框中,勾選 「啟用識別欄位插入」 核取方塊。
  4. 確定返回精靈,繼續完成匯入。

效果:精靈自動在資料流中加入 SET IDENTITY_INSERT [Table] ON,允許顯式寫入 ID 值,匯入完成後自動關閉。

進階情境與替代方案

情境建議做法
大量資料、需高效能使用 bcp / BULK INSERT / SSIS 套件,可批次控制 IDENTITY_INSERT、錯誤重導、平行處理。
來源無 ID 欄位,目的地為 IDENTITY對應時將來源 ID 欄位設為 <忽略>,讓目的地自動產生新 ID。
跨伺服器異構遷移SSIS 專案部署至 SSISDB,支援參數化、記錄、事件處理、增量載入。
精靈記憶體不足/逾時分批匯出(加 WHERE 篩選)、增加封包大小、使用 64 位元 SSMS。

T-SQL 手動控制範例


SET IDENTITY_INSERT TargetTable ON;
INSERT INTO TargetTable (ID, Col1, Col2)
SELECT ID, Col1, Col2 FROM SourceTable;
SET IDENTITY_INSERT TargetTable OFF;

同一 Session 同一時間僅能有一張資料表開啟 IDENTITY_INSERT ON。

總結

匯入匯出精靈遇到身分識別欄位插入失敗,核心解法就是**「編輯對應 → 啟用識別欄位插入」**。大規模/生產遷移建議升級至 SSIS 套件,獲得完整的錯誤處理、記錄、排程與部署能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved