2012-01-11 166 views
-1

我需要從Excel導入數據到我的數據庫。我需要將我的Excel工作表中的數據插入到數據庫中的現有表中。將excel數據導入到SQL Server 2008中

我試圖在sql嚮導的幫助下導入數據。首先我將它導入臨時表中,然後使用插入查詢將數據導入到目標表中。但它似乎沒有正常工作。

因此,PLZ建議我導入數據的好方法。而且如果你建議使用一些好的sql腳本來導入會更好。

+1

多少列在電子表格中? – Sparky 2012-01-11 05:46:56

+1

你是什麼意思的「一些什麼不好」?有什麼工作嗎? – Blanthor 2012-05-15 14:30:38

回答

0

你沒有提到有關現有表和表鍵什麼,excel文件,所以只給你一推,以下命令選擇從xltest.xls文件表中的所有數據(「customrs」)

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=C:\test\xltest.xls', [Customers$]) 

從這一點來看,它取決於您的數據庫結構如何導入/合併到現有的數據。

1

我試着用以前的答案上.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$]) 

機器人的時候,我得到了相同的錯誤消息:

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的信息:

微軟SQL Server Management Studio中10.50.1617.0微軟 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 Mi crosoft的.NET Framework 2.0.50727.5448操作系統6.1.7601

我沒有Microsoft.Jet.OLEDB.4.0或至少我不知道如何得到它。如果這是問題的原因,我也不知道如何在32位模式下運行所有​​內容。如果我因爲某種原因沒有安裝它,我將不勝感激以32位模式運行的幫助,並且還下載和安裝Microsoft.Jet.OLEDB.4.0。

我嘗試了我看到的針對SQL Server 2005發佈的鏈接服務器方法,但本教程中沒有提到Microsoft.Jet.OLEDB.4.0選項。見http://support.microsoft.com/kb/321686

0

首先將電子表格保存爲.xls(97-2003版本)格式並將其導入到臨時文件中的SQL中。導入這些數據後,請確保臨時表字段長度與原始字段相似。

然後輸入如下語句來更新原單表

insert into orginal (field1, field2) 
select field1, field2 from temp 
0

有三種方式,我通常做到這一點。

  1. 在工作表中使用VBA。這涉及到一些開發工作,如果你只是這樣做了一次,那麼太費力了。如果你想多次使用這個工作表,這很好。
  2. 在工作表中使用宏組合來連接 插入查詢,然後我將其粘貼到SQL Management Studio或 某些類似的SQL客戶端,然後運行插入。
  3. 使用批量複製命令行工具來複制一個CSV文件,我 會從工作表轉換,就像這樣:bcp [dbname].[dbo].[myTableName] in data1.csv -T -SmyServerName -c -t^| > log1.txt
3

對於文件Excel 2007中的版本(* .xlsx)格式

INSERT INTO MyTable 
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
'Excel 12.0;Database=D:\test.xlsx', [Customer$]) 

對於文件練成97-2003版本(的* .xls)

INSERT INTO MyTable 
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=D:\test.xls', [Customer$]) 
+1

什麼是[客戶$] – 2013-03-03 07:15:52

+0

@AlirezaMassali [客戶$]是來自文件test.xls的工作表名稱 – Fauzi88 2013-03-04 09:06:32

0

如果您需要導入的.xlsx到64位SQL Server,嘗試安裝64 Microsoft Access數據庫引擎。

http://www.microsoft.com/en-us/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$]')