前幾天考試系統匯入匯出學生資訊,初次接觸匯入匯出,為sqlserver和excel的資料傳遞方法之簡和MS產品的高效相容所震驚,但也遇到各種各樣問題,在此介紹SQLServer匯入匯出excel方法及遇到的問題。
SQLServer匯出Excel
匯出步驟想對較少,出現的問題也較少。
1、進入Excel---資料---自其它來源---來自SQLServer。
:
2、串連資料庫:
3、選擇資料庫和表---完成:
4、選擇插入位置---確定---顯示匯出結果:
SQLServer匯入excel
1、選擇要匯入的資料庫---任務---匯入資料,
2、選擇excel資料來源---瀏覽檔案。注意如果excel中首行資料為欄位,應勾選“首行包含列名稱”。
3、選擇資料庫---選擇源表和原視圖:
注意,如果不選則目標,則會在資料庫中自動產生同名的表,並把資料匯入進去。
4、如不需儲存SSIS包,直接點擊完成即可。
不出錯誤到此以匯入完畢,但是實際上並非如此,錯誤樣本:
操作已停止...- 正在初始化資料流程工作 (成功)- 正在初始化串連 (成功)- 正在設定 SQL 命令 (成功)- 正在設定源串連 (成功)- 正在設定目標串連 (成功)- 正在驗證 (成功)- 準備執行 (成功)- 執行之前 (成功)- 正在執行 (成功)- 正在複製到 [dbo].[t_Student] (錯誤)訊息錯誤 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 匯入和匯出嚮導) - 執行之後 (成功)訊息資訊 0x402090df: 資料流程工作 1: “組件“目標 - t_Student”(47)”中的資料插入操作的最終提交已開始。 (SQL Server 匯入和匯出嚮導) 資訊 0x402090e0: 資料流程工作 1: “組件“目標 - t_Student”(47)”中的資料插入操作的最終提交已結束。 (SQL Server 匯入和匯出嚮導) 資訊 0x4004300b: 資料流程工作 1: “組件“目標 - t_Student”(47)”已寫入 0 行。 (SQL Server 匯入和匯出嚮導)
就個人經驗而言,一般提示最有用能直觀展示非系統問題的是第二個錯誤提示,如上述:“錯誤 0xc020901c: 資料流程工作 1: 輸入“Destination Input”(60) 上的 輸入列“studentId”(127) 出錯。返回的列狀態是:“該值違反了該列的完整性條件約束。”
常見問題:
1、外鍵約束,例如:已獲得 OLE DB 記錄。源:“Microsoft SQL Server Native Client 10.0” Hresult: 0x80004005 說明:“INSERT 語句與 FOREIGN KEY 約束"FK_t_Student_t_Classes"衝突。該衝突發生於資料庫"CollegeSystemVBTest",表"dbo.t_Classes", column 'classId'。”一般外鍵約束禁止更新或插入會觸發此問題,解決方案,詳見我的部落格《簡簡單單說外鍵和級聯》。
2、列的完整性條件約束,例如:“錯誤 0xc020901c: 資料流程工作 1: 輸入“Destination Input”(60) 上的 輸入列“studentId”(127) 出錯。返回的列狀態是:“該值違反了該列的完整性條件約束。”一般主鍵約束會觸發此問題,例如匯入的excel中主鍵重複。想想當時因為是由2000多行學生資訊,轉專業的學生、來源資料錯誤都會產生重複行,當時想的辦法是先匯入Access,尋找重複列然後再刪除,雖能解決,但是效率太低,更好的解決方案,excel內建去除重複列功能,進入excel---資料---重複資料刪除項。
3、映射列多餘,SQLserver雖然可以智能識別映射列,但是成功率並非100%,所以可以在匯入excel第三步驟中編輯映射列或是選擇產生映射列。
4、資料長度,這個問題也十分常見,excel儲存格預設字元長度最大值為255,超過255即出錯。
文尾
一般情況下,雖然有時候錯誤不是那麼好理解和找到,但是只要認真觀察,即可發現錯誤,否則即使小小的一個錯誤,也能耗上你半天。反思:仔細觀察每個提示、有針對性的解決、多角度嘗試、不要想著只要解決問題,同時要學習解決問題的這個過程。