程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> EXCEL某列長度超過255個字符導入SQL SERVER2005的處理方法

EXCEL某列長度超過255個字符導入SQL SERVER2005的處理方法

編輯:關於SqlServer

問題描述:

    [Excel 源 [1]] 錯誤: 輸出“Excel 源輸出”(9) 上的 輸出列“Description 3”(546) 出錯。返回的列狀態是:“文本被截斷,或者一個或多個字符在目標代碼頁中沒有匹配項。”。

該列在excel中最長為308個字符,但是Excel源中的外部列和輸出列最多只能設為Nvarchar(255),如果設定長度超過255,則出現警告,源列屬性不匹配,執行也通不過。使用Ntext類型也嘗試過,不匹配。

我使用ado.Net倒是把它倒入到數據庫了,但是發現所有超過255的都被截斷了。

原因分析:

   ADO和SSIS的Excel源對數劇列的長度的判定存在問題。

解決方案一:

      把Excel轉換成CSV格式,然後使用平面文件源導入數據庫。

      需要注意兩點:

      1、輸出列長度需要手動修改。

      2、注意不同語言造成的Unicode字符轉換問題,必要時先切換系統語言,再作轉換。

解決方案二:

     將注冊表中

Jet引擎.
HKEY_LOCAL_MacHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

如果是:ACE引擎.
HKEY_LOCAL_MacHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel

下的TypeGuessRows 項的值設置為0

Windows server 2003 系統注冊表中,JET項位於HKEY_LOCAL_MacHINE\SOFTWARE\MicrosoftWow64Node\下

原因是驅動默認情況下根據列的前8行數據判定列長度,修改為0後需要檢查整列數據來判定列長度,超過255個字符默認為ntext格式,少於255個字符則默認為nvarchar(255)。

添加一個數據流.在數據流裡.添加一個OLEDB源.

新建一個Excel的oledb源.在這裡就不說了.

只需要將Provider設置為Microsoft Ace Oledb.然後選擇Excel文件.

然後設置Extended PropertIEs屬性為Excel 12.0;HDR=YES

解決方案三:

         使用函數將長度超過255個字符的列切割為多個少於255的列,導入數據庫後在進行合並。

         注意Excel的選擇性粘貼功能。

        可用函數:Left ,Mid

經過我測試,通過!

下載注冊表文件

SELECT len(convert(varchar(1000),人員分工)),*  FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\book1.xls";User ID=Admin;PassWord=;Extended propertIEs=Excel 5.0')...[Sheet1$]order by len(人員分工) desc--select * from Table1 
select len(人員分工),* from OpenRowSet('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;HDR=Yes;IMEX=1;Database=c:\book1.xls', 'select 人員分工,* from [Sheet1$]') order by len(人員分工) descselect * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=c:\book1.xls', [Sheet1$])  order by len(人員分工) desc
select len(人員分工),* from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Data Source=c:\book1.xls;Extended PropertIEs="Excel 12.0;HDR=Yes;IMEX=0"')...[Sheet1$]order by len(人員分工) desc

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved