簡體   English   中英

將Excel數據導入SQL Server 2008

[英]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

我通常通過三種方式執行此操作。

  1. 在工作表中使用VBA。 如果您僅執行一次,那么這涉及到一些開發工作,恕我直言。 如果您想多次使用此工作表,這很好。
  2. 在工作表中使用宏的組合來連接插入查詢,然后將其粘貼到SQL Management Studio或某些類似的SQL客戶端中,然后運行插入。
  3. 使用大容量復制命令行工具復制一個CSV文件,該文件將從工作表中轉換,如下所示: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM