Sql server .xlsx到SQL(导致问题的数据库字符串)
我一直在努力创建一个存储过程,以便将.xlsx文档导入到SQL表中。如果我为.xlsx文件使用静态数据库路径,它将不会出现任何问题。我遇到的问题是,公司的多个分支机构将创建特定于其分支机构的文件。文件名的格式始终为Airport Code_date.xlxs 有人能帮我让@pathToFile正常工作吗。每次尝试将其添加到数据库字符串时,我都会收到错误。我还没有发布完整的代码来让它更容易阅读。如果你需要完整的代码,请让我知道 谢谢Sql server .xlsx到SQL(导致问题的数据库字符串),sql-server,tsql,excel-2010,Sql Server,Tsql,Excel 2010,我一直在努力创建一个存储过程,以便将.xlsx文档导入到SQL表中。如果我为.xlsx文件使用静态数据库路径,它将不会出现任何问题。我遇到的问题是,公司的多个分支机构将创建特定于其分支机构的文件。文件名的格式始终为Airport Code_date.xlxs 有人能帮我让@pathToFile正常工作吗。每次尝试将其添加到数据库字符串时,我都会收到错误。我还没有发布完整的代码来让它更容易阅读。如果你需要完整的代码,请让我知道 谢谢 FROM OPENROWSET ( 'Microsoft.ACE
FROM OPENROWSET
(
'Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=' + @pathToFile,
'SELECT * FROM [sheet1$]'
)
为此,您需要动态SQL,因为OPENROWSET的参数必须是常量
DECLARE @sql varchar(max)
SET @sql = 'SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',' + QUOTENAME('Excel 12.0;Database='+@pathtofile,CHAR(39)) + ',''SELECT * FROM [sheet1$]'')'
INSERT DestinationTable
EXEC sp_executesql @sql
QUOTENAME()是为了防止SQL注入,因为@pathtofile不能被参数化。这需要动态SQL,因为OPENROWSET的参数必须是常量
DECLARE @sql varchar(max)
SET @sql = 'SELECT * FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',' + QUOTENAME('Excel 12.0;Database='+@pathtofile,CHAR(39)) + ',''SELECT * FROM [sheet1$]'')'
INSERT DestinationTable
EXEC sp_executesql @sql
QUOTENAME()是为了防止SQL注入,因为@pathtofile无法参数化。您遇到了什么错误?1。你安装了ACE 2吗。如果硬编码文件名3会发生什么。文件在服务器上,对吗?4.SQL进程有权查看该文件?出现了什么错误?1。你安装了ACE 2吗。如果硬编码文件名3会发生什么。文件在服务器上,对吗?4.SQL进程有权查看该文件?就是这样。非常感谢你。我已经为此奋斗了好几个小时,就是这样。非常感谢你。我已经为此奋斗了几个小时。