2012-01-11 75 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$]')