SQL Server 從Excel導入到數據庫操作遇到的科學計數法問題


問題描述

   今天在做從Excel導入數據到SQL Server 中將數據更新到表中,可惜就這一個簡單的操作中出現了一點小插曲,就在我根據Excel中的編號關聯表編號以此更新姓名字段時出現轉換錯誤問題。如下圖1所示:

      

       圖:1

    在SQL Server中,數據類型隱式轉換為從低級別到高級別轉換,FLOAT類型級別高於NVARCHAR,以至於出現圖1錯誤,關於SQL Serevr 詳細數據類型優先級別如下:

    從高到底

1.user-defined data types (highest)--用戶自定義類型

2.sql_variant
3.xml
4.datetimeoffset
5.datetime2
6.datetime
7.smalldatetime
8.date
9.time
10.float
11.real
12.decimal
13.money
14.smallmoney
15.bigint
16.int
17.smallint
18.tinyint
19.bit
20.ntext
21.text
22.image
23.timestamp
24.uniqueidentifier
25.nvarchar (including nvarchar(max) )
26.nchar
27.varchar (including varchar(max) )
28.char
29.varbinary (including varbinary(max) )
30.binary (lowest)


 

    看到這個問題相信大家都覺得很簡單,直接將字段轉換成字符串類型不就可以了嗎? 好吧,直接CONVERT轉成NVARCHAR類型隨后執行,可以執行成功但是關聯出來沒有數據,很奇怪!由於編號在Excel中的類型為FLOAT,經過轉換后數據變成科學計數法數據,模擬一下數據,如下圖2所示:

    

 

    圖:2

 

    知道問題緣由后便可以明准的解決問題,可以有一下幾種方法:

    1. 在Excel中直接將編號列設置成文本格式,隨后到入到SQL Server做操作。

    2.將FLOAT轉換成字符串類型,可先將FLOAT轉成整形或是DECIMAL類型,然后再轉成字符串即可。

    3.將關聯另一個表字段轉為FLOAT類型。

   

    關於解決問題第三點,我將另一個表中的字段轉為FLOAT類型出現的如圖1錯誤(從數據類型 nvarchar 轉換為 float 時出錯。)  ,經過查看字段的數據全是由數字組成,為何還報轉換錯誤? 由於空格並不會引起該錯誤,然后我將目標轉到換行,回車符上面,果然有的數據最后存在換行符。隨后將換行符(char(10))替換成空即可。

 

    順便附帶一下從Excel導入數據到SQL Server的腳本:

    

--OPENROWSET

SELECT  *
FROM    OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                   'Excel 12.0;HDR=Yes;IMEX=1;Database=C:/Users/Administrator/Desktop/20191008.xlsx',
                   'select * from [Sheet3$]');  

--OpenDataSource
SELECT  *
FROM    OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
                       'Data Source=C:/Users/Administrator/Desktop/20191008.xlsx;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1"')...[Sheet3$];

 

    以上為在工作中遇到的一點小問題,記錄下來以便后續用,也可以為其他遇到這個小坑的朋友提供一點解決的辦法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM