[英]Using a TableName instead of Named Range in Excel datasource SQL Query
[英]Import Excel Named Range into SQL Database
我有一个 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 真的可以用来引用命名范围吗? 如果没有,我可以使用其他方法吗?
*这是我的第一个问题,我希望我已经足够清楚并且没有违反任何规则!
克雷格
首先从下面的链接安装驱动程序。
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.excel-sql-server.com/excel-sql-server-import-export-using-vba.htm
dbWb = ThisWorkbook.FullName dsh = "SheetName$"
xlrow = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" & dbWb & "].[" & dsh & "A1:X" & xlrow & "] as aa"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.