Excel導入SQL SERVER,數字和字符會被系統自動置爲NULL的解決方法


    在Excel中,咱們時常會碰到這樣的字段(最多見的就是電話號碼),即有純數字的(如沒有帶區號的電話號碼),又有數字和其它字符混合 (如「區號-電
sql

話號碼」)的數據,在導入SQLServer過程當中,會發現要麼純數字的數據導過去以後變成了NULL,要麼就是數字和其它字符混合的數據導過去以後變成數據庫

了NULL。安全

     爲何有些是純數字的數據導過去以後變成了NULL,有些倒是數字和其它字符混合的數據導過去以後變成了NULL,原來是在將Excel數據導入服務器

SQLServer過程當中,SQLServer會作出判斷,是採用float型仍是nvarchar型來接受數據,測試發現(沒有科學依據),SQLServer採用哪一型取決於將要導入ide

的數據中自己具備哪一型的記錄數比例多,如10筆數據,有4筆沒有帶區號的電話號碼,6筆是帶區號的電話號碼,那麼轉到SQLServer就會選擇測試

nvarchar型,結果就是4筆沒有帶區號的電話號碼導過去以後全成了NULL,反之亦然。無論怎麼樣,咱們最終都但願SQLServer是採用nvarchar來接受.net

數據,畢意咱們要導入的數據中有數字和其它字符混合的數據,用float型來接受是不可能的,這樣只要咱們解決了將純數字的數據轉換成字符型並讓get

SQLServer接受就能夠了。it

     我首先想到的就是將這個字段的全部數據在Excel中設置爲文本格式,剛纔說了原本就是但願導入SQLServer時成爲字符型,但結果使人失望,不起io

做用。

     最終網上搜索到了答案:混合數據類型列的強制解析——IMEX=1
使用 IMEX=1 選參以後,只要取樣數據裏是混合數據類型的列,一概強制解析爲 nvarchar/ntext 文本。固然,IMEX=1 對單一數據類型列的解析是不影

響的。

SELECT * INTO Table08
FROM OpenDataSource
('Microsoft.Jet.OLEDB.4.0','Data Source="E:/1.xls";Extended properties="Excel 5.0;HDR=Yes;IMEX=1;"')...[Sheet1$]

     注:
     1.這條語句是在SQLServer查詢分析器中執行,而且要選擇好數據庫,不然會把要導入的數據往別的數據庫中導了。
     2.Table08是數據導入後在SQLServer中的表名,屬於新建,因此請確認在導入數據前數據庫中沒有該表名,不然會提示已存在同一表名。
     3.Data Source,不要連在一塊兒寫,中間有一空格。
     4.E:/1.xls,爲Excel所在的絕對路徑和數據庫名。
     5.Excel 5.0,根據不一樣的Excel版本寫5.0或8.0或其它。
     6.IMEX=1,是轉換成文本輸入的意思,很是重要,若是沒有,就跟你直接導入效果同樣。
     7.Sheet1是表名,千萬別看到語句中有$就在表名後加上$,由於$是語句要加的,別多此一舉。



-------------------------------------------------------------------------------------------

執行時發現

消息 15281,級別 16,狀態 1,第 1 行

SQL Server 阻止了對組件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的訪問,由於此組件已做爲此服務器安全配置的一部分而被關閉。系統管理員能夠經過使用 sp_configure 啓用 'Ad Hoc Distributed Queries'。有關啓用 'Ad Hoc Distributed Queries' 的詳細信息,請參閱 SQL Server 聯機叢書中的 "外圍應用配置器"。


------開啓

exec sp_configure 'show advanced options',1
reconfigure

exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure

------關閉

exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure
相關文章
相關標籤/搜索