Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server .xlsx到SQL(导致问题的数据库字符串)_Sql Server_Tsql_Excel 2010 - Fatal编程技术网

Sql server .xlsx到SQL(导致问题的数据库字符串)

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

我一直在努力创建一个存储过程,以便将.xlsx文档导入到SQL表中。如果我为.xlsx文件使用静态数据库路径,它将不会出现任何问题。我遇到的问题是,公司的多个分支机构将创建特定于其分支机构的文件。文件名的格式始终为Airport Code_date.xlxs

有人能帮我让@pathToFile正常工作吗。每次尝试将其添加到数据库字符串时,我都会收到错误。我还没有发布完整的代码来让它更容易阅读。如果你需要完整的代码,请让我知道

谢谢

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进程有权查看该文件?就是这样。非常感谢你。我已经为此奋斗了好几个小时,就是这样。非常感谢你。我已经为此奋斗了几个小时。