在SQL数据库的一个表中导入多个Excel工作表,只有一个工作表具有标题

时间:2018-05-25 22:18:10

标签: sql-server ssms-17

我有一个excel文件,由另一个有多个excel表的程序生成。 列结构是相同的,只是第一个工作表有标题,其余的只是从最后一个工作表结束的地方继续 - 它是一个xls格式,每个工作表只允许65.563行。

我想在SQL Server Management Studio的一个表中导入它们。

我对SSMS不熟悉,所以我不确切知道从哪里开始。

你能帮忙吗?

由于

2 个答案:

答案 0 :(得分:1)

我想我有一些教程。它可以帮助您快速将记录从Excel插入数据库。

这是示例代码:

    INSERT INTO Employee
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
  'Excel 12.0 Xml; HDR=YES; IMEX=1;
   Database=C:\DataFiles\EmployeeData1.xlsx',
   [vEmployee$]);

有关详细信息,请访问此链接:tutorial link

或者你也可以这样做:Tutorial for excel to database

答案 1 :(得分:0)

您可以做一些事情。

以下是从Excel 2003迁移数据的脚本:

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

但是,当Excel 2007及更高版本使用相同的代码时,会出现以下错误:

SELECT * FROM  OPENROWSET('Microsoft.Jet.OLEDB.4.0'
,'Excel 4.0;Database=D:\test.xlsx','SELECT * FROM [sheet1$]')

消息7399,第16级,状态1,第1行 链接服务器“(null)”的OLE DB提供程序“ Microsoft.Jet.OLEDB.4.0”报告了一个错误。提供程序未提供有关该错误的任何信息。 Msg 7303,第16级,状态1,第1行 无法为链接服务器“(null)”初始化OLE DB访问接口提供程序“ Microsoft.Jet.OLEDB.4.0”的数据源对象。

让我们逐步解决这个问题。

第1步: 下载Microsoft Access数据库引擎2010

第2步: 在计算机上安装Microsoft Access Database Engine 2010。

第3步: 打开SQL Server Management Studio。 (如果已经打开,请关闭然后重新打开)

第4步: 启用临时查询。

sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

第5步: 关闭您需要导入的Excel工作表(如果已打开)。

第6步: 在下面给出的脚本中使用$符号给出正确的路径,文件名和excel工作表名称,然后执行查询。 此信息必须正确。

SELECT * FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=E:\test.xlsx;HDR=YES;IMEX=1',
'SELECT * FROM [sheet1$]');

如果第一行具有列名,则为“HDR=YES“,否则应为否。

在临时表中需要此查询结果的情况下,以下是将Excel记录插入到临时表中的脚本。

SELECT * into Temp FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=E:\test.xlsx;HDR=YES;IMEX=1',
'SELECT * FROM [sheet1$]');

或者,类似地...

---- Has column names
SELECT * FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=E:\test.xlsx;HDR=YES;IMEX=1', 'SELECT * FROM [sheet1$]');

---- Does not have column names
SELECT * FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=E:\test.xlsx;HDR=NO;IMEX=1', 'SELECT * FROM [sheet2$]');

---- Does not have column names
SELECT * FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=E:\test.xlsx;HDR=NO;IMEX=1', 'SELECT * FROM [sheet3$]'); 
相关问题