使用「SQL Server 匯入和匯出精靈」將資料從來源複製到目的地時,驗證階段失敗,錯誤訊息:
錯誤 0xc0202049: 無法在唯讀欄位 "ID" 中插入資料。錯誤 0xc0202045: 驗證欄位中繼資料失敗。錯誤 0xc004706b: 元件 "目的地 - TableName" 驗證失敗,狀態 VS_ISBROKEN。錯誤 0xc004700c: 一或多個元件未通過驗證。錯誤 0xc0024107: 工作驗證期間發生錯誤。核心原因:目的地資料表含 IDENTITY 欄位,預設不允許顯式插入值,精靈嘗試寫入來源的 ID 值導致驗證失敗。
效果:精靈自動在資料流中加入 SET IDENTITY_INSERT [Table] ON,允許顯式寫入 ID 值,匯入完成後自動關閉。
| 情境 | 建議做法 |
|---|---|
| 大量資料、需高效能 | 使用 bcp / BULK INSERT / SSIS 套件,可批次控制 IDENTITY_INSERT、錯誤重導、平行處理。 |
| 來源無 ID 欄位,目的地為 IDENTITY | 對應時將來源 ID 欄位設為 <忽略>,讓目的地自動產生新 ID。 |
| 跨伺服器異構遷移 | SSIS 專案部署至 SSISDB,支援參數化、記錄、事件處理、增量載入。 |
| 精靈記憶體不足/逾時 | 分批匯出(加 WHERE 篩選)、增加封包大小、使用 64 位元 SSMS。 |
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 套件,獲得完整的錯誤處理、記錄、排程與部署能力。