Ssms

SQL Server 導入嚮導 Excel 到 SQL Server 2016 錯誤 0xc020901c

  • April 27, 2017

我正在嘗試通過 SQL Server Management Studio 將包含 3914 行數據的 Excel 文件導入到 SQL Server 2016 Express 上的現有表中。我上個月導入了一個類似的文件,但這是一個每月更新的文件,所以我在導入新文件之前從表中刪除了所有內容。但是,現在,當我完成嚮導並執行所有操作時,我收到以下錯誤消息:

留言

錯誤 0xc0202009:數據流任務 1:SSIS 錯誤程式碼 DTS_E_OLEDBERROR。發生 OLE DB 錯誤。錯誤程式碼:0x80004005。OLE DB 記錄可用。來源:“Microsoft OLE DB Provider for SQL >Server”

Hresult:0x80004005 描述:“未指定的錯誤”。(SQL Server 導入和導出嚮導)

錯誤 0xc020901c:數據流任務 1:目標出現錯誤 - IACList.Inputs

$$ Destination >Input $$。列$$ Approval Number $$在目的地 - IACList.Inputs$$ Destination >Input $$. 返回的列狀態是:“該值違反了列的完整性約束 >。”。(SQL Server 導入和導出嚮導) 錯誤 0xc0209029:數據流任務 1:SSIS 錯誤程式碼 >DTS_E_INDUCEDTRANSFORMFAILUREONERROR。“目標 - >IACList.Inputs

$$ Destination Input $$" 失敗,因為發生了錯誤程式碼 0xC020907D,並且 >“Destination - IACList.Inputs 上的錯誤行處置$$ Destination Input $$” 指定錯誤失敗。在指定組件的指定對像上發生錯誤。>可能在此之前發布了錯誤消息,其中包含有關>失敗的更多資訊。(SQL Server 導入和導出嚮導) 錯誤 0xc0047022:數據流任務 1:SSIS 錯誤程式碼 DTS_E_PROCESSINPUTFAILED。>在處理輸入“目標輸入”(48) 時,組件“目標 - IACList”(35) 上的 ProcessInput 方法失敗,錯誤程式碼為 0xC0209029。>identified 組件從 ProcessInput 方法返回了一個錯誤。錯誤>特定於組件,但該錯誤是致命的,將導致數據流>任務停止執行。在此之前可能會發布錯誤消息,其中包含有關失敗的更多資訊。(SQL Server 導入和導出嚮導)

在我看來,該錯誤似乎與“批准號”列有關。當我查詢表時,它顯示導入後伺服器上有3824條記錄,但應該有3915條記錄。我檢查了 Excel 文件中我認為應該是第 3,824 號的記錄,它似乎沒有任何問題。也許我誤解了錯誤消息,但我看不出違反完整性約束的原因。它是一個主鍵,但列中沒有其他欄位與之匹配,因此它是唯一的。

其中重要的部分如下:

Destination - IACList.Inputs 出現錯誤

$$ Destination >Input $$. **列$$ Approval Number $$**在目的地 - IACList.Inputs$$ Destination >Input $$. 返回的列狀態為:“該值違反了該列的完整性約束。”

因此,請檢查 SQL 中“批准號”列的數據類型,或您添加到表中的任何其他約束/外鍵,並將其與新電子表格中的值進行比較。

如果表是根據第一個電子表格中的值創建的,則可能將列設置為太小的數據類型,或者完全錯誤的數據類型。

例如,可能第一個電子表格的“批准編號”列中僅包含數字,因此 SQL 中的列具有 INT 數據類型。但是第二個有一些帶有字母的行(“197234b”或“unknown”之類的),或者對於 INT 數據類型來說值太大的行。

您需要將該列的數據類型更改為更適合您接收的實際數據(varchar 或 BIGINT 或其他)的數據類型,或者在導入電子表格之前編輯電子表格以刪除任何錯誤值。

編輯:還要查看這個 Stackoverflow 問題中的想法:看起來 Excel 有時會嘗試在列表末尾導入額外的空白行。您可以通過以下幾種方式之一處理此問題:

  • 在 Excel 中按 CTRL-END,這會將您帶到 Excel認為有數據的底部。刪除(不僅僅是清除)那些額外的行。
  • 您可以在目標行中將目標上的約束更改為“允許 NULL”,然後從 SQL 中刪除它們
  • 您可以更改 SSIS 中輸入的過濾條件以排除任何缺少值的行
  • 您可以將“錯誤”輸出添加到 SSIS 中的數據轉換,以將任何失敗的行輸出到不同的數據集,您可以忽略該數據集,也可以將其插入到沒有約束的表中(所有 varchar(255)s,每次都允許 NULL列等)。這樣,如果將來有不同的錯誤,您可以立即看到哪些行是問題。

引用自:https://dba.stackexchange.com/questions/172174