Excel資料匯入Sql Server,部分數字為Null

th2發表於2018-03-21

在Excel中,我們時常會碰到這樣的欄位(最常見的就是電話號碼),即有純數字的(如沒有帶區號的電話號碼),又有數字和其它字元混合 (如“區號-電

話號碼”)的資料,在匯入SQLServer過程中,會發現要麼純數字的資料導過去之後變成了NULL,要麼就是數字和其它字元混合的資料導過去之後變成

了NULL。

    我首先想到的就是將這個欄位的所有資料在Excel中設定為文字格式,剛才說了本來就是希望匯入SQLServer時成為字元型,但結果令人失望,不起

作用。

    最終網上搜尋到了答案:混合資料型別列的強制解析——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.Microsoft.Jet.OLEDB.4.0,根據不同的office版本寫4.0或12.0或其它。
    7.IMEX=1,是轉換成文字輸入的意思,非常重要,如果沒有,就跟你直接匯入效果一樣。
    8.Sheet1是表名,千萬別看到語句中有$就在表名後加上$,因為$是語句要加的,別畫蛇添足。

上述語句執行後,可能會報出以下錯誤:

SQL Server 阻止了對元件 `Ad Hoc Distributed Queries` 的 STATEMENT`OpenRowset/OpenDatasource` 的訪問,因為此元件已作為此伺服器安全配置的一部分而被關閉。系統管理員可以通過使用 sp_configure 啟用 `Ad Hoc Distributed Queries`。有關啟用 `Ad Hoc Distributed Queries` 的詳細資訊,請參閱 SQL Server 聯機叢書中的 “外圍應用配置器”。

1.開啟Ad Hoc Distributed Queries元件,在sql查詢編輯器中執行如下語句:
 exec sp_configure `show advanced options`,1
reconfigure
exec sp_configure `Ad Hoc Distributed Queries`,1
reconfigure

如需關閉則引數1改為0

相關文章