将Excel命名范围导入SQL数据库

时间:2019-01-27 17:49:26

标签: sql sql-server excel vba

我有一个excel文件“ test.xlsx”,其中包含一个名为“ SheetName”的工作表,其中包含一个名为“ NamedRange”的命名范围。

我想用Visual Basic编写一个脚本,以将这些命名范围导入到SQL数据库中。到目前为止,我已经尝试过openrowset,但是找不到正确的语法来引用命名范围。无效的查询示例:

USE [Test_DataBase]
GO
SELECT * INTO New
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0; Database=D:\Test.xlsx', NamedRange);
GO

此错误是:链接服务器“(null)”的OLE DB提供程序“ Microsoft.ACE.OLEDB.12.0”不包含表“ NamedRange”。该表不存在,或者当前用户对该表没有权限。

但是我可以使用以下方式导入完整的工作表:

USE [Test_DataBase]
GO
SELECT * INTO New
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0; Database=D:\Test.xlsx', SheetName$);
GO

我也尝试过:

USE [Test_DataBase]
GO
SELECT * INTO New
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0; Database=D:\Test.xlsx', SheetName$NamedRange);
GO

但是会产生以下错误:链接服务器“(null)”的OLE DB提供程序“ Microsoft.ACE.OLEDB.12.0”不包含表“ SheetName $ NamedRange”。该表不存在,或者当前用户对该表没有权限。

那么,openrowset实际上可以用来引用命名范围吗?如果没有,我可以改用其他方法吗?

*这是我的第一个问题,希望我已经足够清楚并且没有违反任何规则!

克雷格

2 个答案:

答案 0 :(得分:0)

  1. 您可以使用SSIS。

  2. 您可以使用向导的“导入数据”:右键单击DB-> 任务-> 导入数据

enter image description here

答案 1 :(得分:0)

首先从下面的链接安装驱动程序。

https://www.microsoft.com/en-us/download/details.aspx?id=13255

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


USE YourDatabase;
GO
SELECT * INTO Table1
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0; Database=C:\your_path\test.xlsx', [Sheet1$nr]);
GO
-- 'nr' is your named range

有关更多详细信息,请参见这些链接。

http://www.ashishblog.com/importexport-excel-xlsx-or-xls-file-into-sql-server/

https://www.red-gate.com/simple-talk/sql/t-sql-programming/questions-about-using-tsql-to-import-excel-data-you-were-too-shy-to-ask/#sixth

https://www.excel-sql-server.com/excel-sql-server-import-export-using-vba.htm