導入前請先關閉本地文件,解除占用。
截斷——長度或類型不匹配(右鍵單元格格式)
凡是提示報錯中帶有"截斷"等字樣,注意看一下里面提示的列是哪個。比如F4是第四列,點擊back回到編輯映射那里,點預覽看一下格式是否不匹配。
這里主要原因在Excel方,有的Excel的數據長度不像表面上那樣,最好的辦法直接設定長一點的char類,或者直接nvarchar變長就好。另外右鍵設置單元格格式看一下是什么類型的。
通常都是長度和類型的原因,報錯信息給我們最直接的反饋就是哪一列出了問題,從這兩個角度入手很好解決的。
解決后最好關掉導入向導重新來一遍,否則可能會出現因文件占用出現的報錯。
約束——主鍵重復或Excel有空行
凡是提示如下內容:
消息 錯誤 0xc0202009: 數據流任務 1: SSIS 錯誤代碼 DTS_E_OLEDBERROR。出現 OLE DB 錯誤。錯誤代碼: 0x80004005。 已獲得 OLE DB 記錄。源:“Microsoft SQL Server Native Client 10.0” Hresult: 0x80004005 說明:“未指定的錯誤”。 (SQL Server 導入和導出向導) 錯誤 0xc020901c: 數據流任務 1: 輸入“Destination Input”(60) 上的 輸入列“studentId”(127) 出錯。返回的列狀態是:“該值違反了該列的完整性約束。”。 (SQL Server 導入和導出向導) 錯誤 0xc0209029: 數據流任務 1: SSIS 錯誤代碼 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。“輸入“Destination Input”(60)”失敗,錯誤代碼為 0xC020907D,而且針對“輸入“Destination Input”(60)”的錯誤行處理設置指定一旦出錯就失敗。在指定組件的指定對象上出錯。可能在此之前已經發出錯誤消息,提供了有關失敗的詳細信息。 (SQL Server 導入和導出向導) 錯誤 0xc0047022: 數據流任務 1: SSIS 錯誤代碼 DTS_E_PROCESSINPUTFAILED。處理輸入“Destination Input”(60)時,組件“目標 - t_Student”(47)的 ProcessInput 方法失敗,錯誤代碼為 0xC0209029。標識的這個組件從 ProcessInput 方法返回了一個錯誤。雖然該錯誤是此組件特有的,但卻是致命的,將導致數據流任務停止運行。可能在此之前已經發出錯誤消息,提供了有關失敗的詳細信息。 (SQL Server 導入和導出向導)
錯誤很明顯,解決方案很隱蔽。看第二段,這里翻譯過來就是Excel中的studentId列有重復,Excel選中“數據”——“刪除重復項”即可。
如果還是不行,那么就是因為有空行,NULL值的存在當然也是違反了主鍵約束性的了!!
小技巧:復制顯示出來的表格數據到新建的表中,省得再去排查空行(注意,Excel刪除重復的功能對空行無用,親測)
空列
舉一反三,還可能是空列造成提示"列不能為0”的情況。
少列
似乎這是個不常見的錯誤,但有時候的確可能有疏忽,此時會提示:
SSIS驗證失敗,並返回驗證狀態“ VS_ISBROKEN”或"不能存在空列的情況"
拓展提示
另外說一下導入要注意的幾個細節,其余的直接下一步就好。我的目前是2020版本,不過親測與之前的並無不同。
1.數據源選擇“Microsoft Excel”,版本選擇97-2003比較穩定。首行包含列名稱這里,如果第一行就是數據,那么就取消勾選
(注意默認是勾選的)。
如果第一行是表頭(標題等),那么就默認選中。
2.目標選擇“SQL Server Native Client 11.0 ”,身份驗證就是連接數據庫一開始的登錄信息,然后選要導進的數據庫。
3.選擇表和視圖這里,如果你是要導入已經新建好的表中,那么要勾選。
通常表格只用到了'Sheet1$'(就是Excel左下角的工作區),在上面勾選以后點擊目標,找到數據庫對應的表即可。
如果是直接導入一個新表,那么就不用編輯目標了,直接下一步就好。可以點擊預覽看一下順序對不對。
如果列的順序不一致,點擊編輯映射就好,通常編輯Excel的時候就提前對齊了,算是習慣問題。