以编程方式将Excel文件导入SQL Server

时间:2017-07-10 20:26:00

标签: sql sql-server vba ms-access

我需要创建一个过程,根据命令将数据从MS Excel电子表格上传到SQL服务器。我的背景是在Access VBA中我试图使用Microsoft支持网站上描述的以下任一分布式查询方法:(https://support.microsoft.com/en-us/help/321686/how-to-import-data-from-excel-to-sql-server)。我的表名和文件名不同,否则我使用下面的确切代码。我收到错误:OLE DB提供程序" Microsoft.ACE.OLEDB.4.0尚未注册。"我尝试过其他OLEDB版本无济于事。不知道如何检查我需要的驱动程序版本。我正在使用的SQL服务器是64位,但我的本地计算机是32位,我认为这会导致问题。如果有人能帮助简化这个问题并指出我正确的方向,我将非常感激。我非常精通VBA并具有一些SQL背景知识。除此之外,我没有太多的编程背景。谢谢!

SELECT * INTO XLImport3 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\test\xltest.xls;Extended Properties=Excel 8.0')...[Customers$]

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

2 个答案:

答案 0 :(得分:2)

查询:

SELECT * INTO [TableName]
FROM OPENDATASOURCE( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml; Database=' + [SpreadsheetFullPath] + ';IMEX=1'' )...[' + [WorksheetName] + '$]'

注意:

  1. 请记住,查询是在SQL服务器上执行的,因此[SpreadsheetFullPath]是服务器上的路径而不是本地计算机。
  2. 接受UNC路径(\\ sharedDir \ ...)。
  3. 保持Excel工作表的导入简单。
  4. 当某些内容失败时,此驱动程序返回的错误非常无用,因此请尝试通过观察3来避免它们。
  5. 您可能需要在数据库服务器上安装驱动程序:Office 2010Office 2016

答案 1 :(得分:0)

有一个名为SSIS(Sql Server导入服务)的大型引擎可以执行此操作,包括错误报告,数据转换,日程安排等。它可能已存在于您的服务器上。这不是详细描述它的地方,但youtube上有教程。多年来,设计环境既可以是独立的,也可以是Visual Studio中的插件。 它肯定会解决您的导入问题,但有一个(陡峭的)学习曲线。 (这可能会让你获得更高的技能!)在SSIS之后,您可以继续使用SSRS和SSAS,但这是另一个故事!

您当前的问题是"连接字符串"中的驱动程序名称。它通常取决于您的服务器的操作系统版本。 (即已安装(未安装)的内容)。我建议您让管理员在您的服务器上创建连接到该Excel的ODBC连接DSN文件,而不是猜测(就像我在XP上开发并首先在Win7和Win10上盲目部署)你的文件,然后查看该DSN文件的内容。它将包含适合您服务器安装的连接字符串和您要查找的驱动程序名称。我还发现"默认端口#"连接到Sql Server时,字符串中可能会突然出现。