用SQL語句匯入excel資料
今天,我的Team
Leader讓load一些資料到資料庫中去,之前這樣的事情我也做過。沒有遇到過什麼錯誤,但是今天這個excel讓我吃了不少苦頭。經過我不懈努力,最終解決了所有問題,順利完成任務。下面我把我遇到的問題寫下來和大家探討一下。
一、問題提出
這個excel大概1W條資料,資料量不是很大,開始匯入也很順利。不到一分鐘就完成了,結果我發現有一列資料全部變成了null,並且其他列的資料格式也不正確。然後我就更改了每個列的資料型別,結果導致資料無法匯入。鬱悶!
二、問題深化
於是我想到用SQL語句去試一下,用下面的語句執行了一下。
SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;HDR=YES;imex=1;Database=\\surrey-test\GS\GS_UNpaid.xls',
'SELECT * FROM [Sheet1$]')
結果出現,OLE DB 提供程式 'Microsoft.Jet.OLEDB.4.0' 不包含表 'Sheet1$'。該表可能不存在,或當前使用者沒有使用該表的許可權。
OLE DB 錯誤跟蹤[Non-interface error: OLE DB provider does not contain the table: ProviderName='Microsoft.Jet.OLEDB.4.0', TableName='Sheet1$']。
於是,詳細思考了一下。哦,原來我的excel沒有放到Server上,放上去之後在此執行,資料查出來了。
三、設法解決
資料查出來之後格式依然不正確,不符合我們的要求,於是開始進行資料格式的轉換。開始的時候使用convert和cast把資料轉換為float型別,不行。於是再次轉換convert(float,convert(varchar(50),isnull(gs_guid,0))),這次格式對了,但是資料卻由於float型別的精度問題而發生了改變,不能滿足要求。於是使用
left(cast(cast(convert(float,convert(varchar(20),confirmation_no)) as decimal(20,7)) as varchar(20)),9),結果還是不能讓人滿意,資料失真了。苦思冥想,終於想到這條cast(cast(confirmation_no as decimal) as varchar),Ok。問題解決,欣喜若狂。
四、檢查問題
就在我要Submit的時候,卻發現一個致命的問題,所有資料格式正確的同時,竟然有一列資料發生了很大變化,於是認真查詢,發現了問題的存在,對於這一列使用
cast(convert(bigint,convert(float,convert(varchar(50),isnull(gs_guid,0))))as varchar),問題終於搞定。
五、問題解決
最後使用
INSERT INTO temp4
select convert(char(4),car_no) as car_no,convert(datetime,[column name]) as pu_date,
cast(cast([column name] as decimal) as varchar),
--left(cast(cast(convert(float(5),convert(varchar(50),[column name])) as decimal(20,7)) as varchar(20)),10),
convert(decimal(12,2),[column name]),convert(char(4),dr_no),
cast(cast([column name]as decimal) as varchar),
cast(cast([column name] as decimal) as varchar),
--convert(float,convert(varchar(50),isnull([column name],0))),
cast(convert(bigint,convert(float,convert(varchar(50),isnull([column name],0))))as varchar),
cast(cast([column name]as decimal) as varchar),
--left(cast(cast(convert(float,convert(varchar(20),[column name])) as decimal(20,7)) as varchar(20)),10),
--left(cast(cast(convert(float,convert(varchar(20),[column name])) as decimal(20,7)) as varchar(20)),9),
--left(cast(cast( convert(float,convert(varchar(50),isnull([column name],0))) as decimal(20,7)) as varchar(20)),9),
--left(cast(convert(float,convert(char(20),[column name])) as varchar(20)),6),
convert(datetime,[column name]) ,isnull([column name],'')
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;HDR=YES;imex=1;Database=\\surrey-test\GS\GS_UNpaid.xls',
'SELECT * FROM [gs_voucher_notpaid$]')
將資料load到Database中去。
六、總結
匯入資料雖然是件很簡單的事情,但是這裡面還是包含了很多知識。比如資料的儲存型別,資料庫中的一些常用函式,等等。希望,這些經驗能夠使我在專案中受益,同時也希望各位多多指點。
一、問題提出
這個excel大概1W條資料,資料量不是很大,開始匯入也很順利。不到一分鐘就完成了,結果我發現有一列資料全部變成了null,並且其他列的資料格式也不正確。然後我就更改了每個列的資料型別,結果導致資料無法匯入。鬱悶!
二、問題深化
於是我想到用SQL語句去試一下,用下面的語句執行了一下。
SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;HDR=YES;imex=1;Database=\\surrey-test\GS\GS_UNpaid.xls',
'SELECT * FROM [Sheet1$]')
結果出現,OLE DB 提供程式 'Microsoft.Jet.OLEDB.4.0' 不包含表 'Sheet1$'。該表可能不存在,或當前使用者沒有使用該表的許可權。
OLE DB 錯誤跟蹤[Non-interface error: OLE DB provider does not contain the table: ProviderName='Microsoft.Jet.OLEDB.4.0', TableName='Sheet1$']。
於是,詳細思考了一下。哦,原來我的excel沒有放到Server上,放上去之後在此執行,資料查出來了。
三、設法解決
資料查出來之後格式依然不正確,不符合我們的要求,於是開始進行資料格式的轉換。開始的時候使用convert和cast把資料轉換為float型別,不行。於是再次轉換convert(float,convert(varchar(50),isnull(gs_guid,0))),這次格式對了,但是資料卻由於float型別的精度問題而發生了改變,不能滿足要求。於是使用
left(cast(cast(convert(float,convert(varchar(20),confirmation_no)) as decimal(20,7)) as varchar(20)),9),結果還是不能讓人滿意,資料失真了。苦思冥想,終於想到這條cast(cast(confirmation_no as decimal) as varchar),Ok。問題解決,欣喜若狂。
四、檢查問題
就在我要Submit的時候,卻發現一個致命的問題,所有資料格式正確的同時,竟然有一列資料發生了很大變化,於是認真查詢,發現了問題的存在,對於這一列使用
cast(convert(bigint,convert(float,convert(varchar(50),isnull(gs_guid,0))))as varchar),問題終於搞定。
五、問題解決
最後使用
INSERT INTO temp4
select convert(char(4),car_no) as car_no,convert(datetime,[column name]) as pu_date,
cast(cast([column name] as decimal) as varchar),
--left(cast(cast(convert(float(5),convert(varchar(50),[column name])) as decimal(20,7)) as varchar(20)),10),
convert(decimal(12,2),[column name]),convert(char(4),dr_no),
cast(cast([column name]as decimal) as varchar),
cast(cast([column name] as decimal) as varchar),
--convert(float,convert(varchar(50),isnull([column name],0))),
cast(convert(bigint,convert(float,convert(varchar(50),isnull([column name],0))))as varchar),
cast(cast([column name]as decimal) as varchar),
--left(cast(cast(convert(float,convert(varchar(20),[column name])) as decimal(20,7)) as varchar(20)),10),
--left(cast(cast(convert(float,convert(varchar(20),[column name])) as decimal(20,7)) as varchar(20)),9),
--left(cast(cast( convert(float,convert(varchar(50),isnull([column name],0))) as decimal(20,7)) as varchar(20)),9),
--left(cast(convert(float,convert(char(20),[column name])) as varchar(20)),6),
convert(datetime,[column name]) ,isnull([column name],'')
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;HDR=YES;imex=1;Database=\\surrey-test\GS\GS_UNpaid.xls',
'SELECT * FROM [gs_voucher_notpaid$]')
將資料load到Database中去。
六、總結
匯入資料雖然是件很簡單的事情,但是這裡面還是包含了很多知識。比如資料的儲存型別,資料庫中的一些常用函式,等等。希望,這些經驗能夠使我在專案中受益,同時也希望各位多多指點。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-617167/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL語句匯入匯出大全SQL
- oracle監控資料泵匯入和匯出的sql語句OracleSQL
- SQL SERVER 和EXCEL的資料匯入匯出SQLServerExcel
- 使用Oracle SQL Developer匯入Excel資料OracleSQLDeveloperExcel
- 匯出Sql Server資料字典的語句SQLServer
- 從EXCEL匯入資料到SQL SERVERExcelSQLServer
- 【SQL】Oracle BLOB 批量匯入匯出圖片語句SQLOracle
- Excel 表匯入資料Excel
- Oracle 資料匯入ExcelOracleExcel
- pl/sql developer將excel資料匯入到資料庫中SQLDeveloperExcel資料庫
- 用SQL Loader將Excel資料匯出到OracleSQLExcelOracle
- SQL語句資料SQL
- Excel資料匯入Sql Server,部分數字為NullExcelSQLServerNull
- JAVA 中使用 SQL 語句查詢 EXCEL 檔案資料JavaSQLExcel
- EasyPoi, Excel資料的匯入匯出Excel
- NCF 如何匯入Excel資料Excel
- excel 匯入sqlyog資料庫ExcelSQL資料庫
- 匯入excel 資料時間Excel
- 從Excel匯入sql serverExcelSQLServer
- 【資料庫】SQL語句資料庫SQL
- asp.net 操作Excel表資料匯入到SQL Server資料庫ASP.NETExcelSQLServer資料庫
- TP5.1excel匯入資料庫的程式碼?php excel如何匯入資料庫?Excel資料庫PHP
- 匯入excel資源到資料庫Excel資料庫
- MySQL 5.5使用LOAD DATA INFILE語句匯入資料MySql
- Oracle匯入excel資料快速方法OracleExcel
- 將excel表格匯入資料庫Excel資料庫
- Excel 匯入 SQL Server 步驟:ExcelSQLServer
- 資料庫常用sql 語句資料庫SQL
- 資料庫SQL拼接語句資料庫SQL
- SQL語句批量插入資料SQL
- 第一章 Excel資料分析入門 --(2)Excel匯入資料Excel
- Oracle - 匯入匯出常用操作語句Oracle
- (轉)excel和sql server的匯入匯出ExcelSQLServer
- 1.4 資料庫和常用SQL語句(正文)——MySQL資料庫命令和SQL語句資料庫MySql
- 用php把資料匯出excelPHPExcel
- 使用資料泵匯出DDL語句
- 用nodepad++生成匯入資料的SQLSQL
- java 從EXCEL匯入到資料庫JavaExcel資料庫