将Excel数据导入SQL Server 2008

时间:2012-01-11 05:44:58

标签: sql excel

我需要将数据从Excel导入我的数据库。我需要将Excel表格中的数据插入数据库中的现有表格。

我尝试在sql向导的帮助下导入数据。首先我将其导入临时表,然后使用插入查询将数据导入到目标表中。但它似乎没有正常工作。

所以,PLZ建议我输入数据的好方法。如果你建议一些好的sql脚本进行导入也会更好。

6 个答案:

答案 0 :(得分:3)

对于文件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$])

答案 1 :(得分: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$])

Bot times我得到了同样的错误信息:

 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 Management 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位模式下运行所有​​内容。我很感激帮助在32位模式下运行,如果我由于某种原因没有安装它,也会下载并安装Microsoft.Jet.OLEDB.4.0。

我尝试了我为SQL Server 2005发布的链接服务器方法,但是没有教程中提到的Microsoft.Jet.OLEDB.4.0选项。请参阅http://support.microsoft.com/kb/321686

答案 2 :(得分:0)

你没有在表和excel文件中提及你现有的表和键的任何内容,所以只是为了给你一个推送,跟随命令选择xltest.xls文件表中的所有数据('customrs')

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

从这一点来说,由数据库结构决定如何导入/合并到现有数据。

答案 3 :(得分:0)

首先将电子表格保存为.xls(97-2003版本)格式,然后将它们导入临时文件中的SQL。导入这些数据后,请确保临时表字段长度与原始字段长度相似。

然后使用以下语句更新原始表

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

答案 4 :(得分:0)

我通常有三种方法。

  1. 在工作表中使用VBA。这涉及一些开发工作,如果你这样做只有一次,那么我就会付出太多的努力。如果您想多次使用此工作表,这很好。
  2. 使用工作表中的宏组合进行连接 插入我然后粘贴到SQL Management Studio的查询,或 一些类似的SQL客户端,并运行插入。
  3. 使用批量复制命令行工具复制CSV文件,我 将从工作表转换,如下所示:bcp [dbname].[dbo].[myTableName] in data1.csv -T -SmyServerName -c -t^| > log1.txt

答案 5 :(得分: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$]')