[英]Importing excel data into SQL Server 2008
我需要將數據從Excel導入到數據庫中。 我需要將數據從Excel工作表插入數據庫中的現有表。
我試圖借助sql向導導入數據。 首先,我將其導入到臨時表中,然后使用插入查詢將數據導入到目標表中。 但是它似乎不能正常工作。
因此,請給我建議導入數據的好方法。 而且,如果您建議導入一些好的sql腳本,也會更好。
對於Excel 2007版本文件(* .xlsx)
INSERT INTO MyTable
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=D:\test.xlsx', [Customer$])
對於Excel 97-2003文件版本(* .xls)
INSERT INTO MyTable
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=D:\test.xls', [Customer$])
我嘗試對.xlsx
文件(版本14.0.6112.2500 64位Microsoft Excel文件)使用上一個答案
SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\xls_to_sql\xltest.xlsx', [Sheet1$])
然后,我將電子表格另存為.xls
(97-2003版),然后重試。
SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\xls_to_sql\xltest.xls', [Sheet1$])
Bot時間,我得到了相同的錯誤消息:
Msg 7308, Level 16, State 1, Line 1
OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
SQL SERVER信息:
Microsoft SQL Server管理Studio 10.50.1617.0 Microsoft Analysis Services客戶端工具10.50.1617.0 Microsoft數據訪問組件(MDAC)6.1.7601.17514 Microsoft MSXML 2.6 3.0 6.0 Microsoft Internet Explorer 9.0.8112.16421 Microsoft .NET Framework 2.0.50727.5448操作系統6.1.7601
我沒有Microsoft.Jet.OLEDB.4.0,或者至少我不知道如何獲得它。 如果這是導致問題的原因,我也不知道如何在32位模式下運行所有程序。 如果我出於某種原因未安裝Microsoft.Jet.OLEDB.4.0,請在32位模式下運行以及下載並安裝Microsoft.Jet.OLEDB.4.0提供幫助。
我嘗試了為SQL Server 2005發布的鏈接服務器方法,但是本教程中沒有提到Microsoft.Jet.OLEDB.4.0選項。 請參閱http://support.microsoft.com/kb/321686 。
首先將電子表格保存為.xls(97-2003版)格式,然后將其導入到SQL的臨時文件中。 導入這些數據后,請確保臨時表字段的長度與原始長度相似。
然后使用下面的語句更新原始表
insert into orginal (field1, field2)
select field1, field2 from temp
我通常通過三種方式執行此操作。
bcp [dbname].[dbo].[myTableName] in data1.csv -T -SmyServerName -c -t^| > log1.txt
bcp [dbname].[dbo].[myTableName] in data1.csv -T -SmyServerName -c -t^| > log1.txt
如果需要將.xlsx導入64位SQL Server,請嘗試安裝64位Microsoft Access數據庫引擎。
請參閱http://www.microsoft.com/zh-cn/download/details.aspx?id=13255
例如,要從c:\\ data.xlsx導入數據,該數據具有名為MyData的工作表,則可以使用:
SELECT *
FROM OPENROWSET ( 'Microsoft.ACE.OLEDB.12.0'
, 'Excel 12.0;database=c:\data.xlsx;IMEX=1'
, 'SELECT * FROM [MyData$]')
您沒有提及任何有關現有表以及表和excel文件中的鍵的信息,因此只是推一下,下面的命令從xltest.xls文件表(“客戶”)中選擇所有數據
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\test\xltest.xls', [Customers$])
從這一點來說,如何導入/合並到現有數據取決於您的數據庫結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.