在 openrowset 中使用动态 sql 产生错误

Using dynamic sql in openrowset produces error

我需要创建一个存储过程,将路径作为参数并通过 OPENROWSET 命令从文件插入到 table。

经过大量的搜索和尝试,我了解到 OPENROWSET 不 支持参数,因此需要动态调用 SQL.

那是不起作用的部分,它向我显示了一个奇怪的错误。

可能是OPENROWSET不接受字符串参数造成的 但是 - 我看到许多构建类似的代码片段,用户说它们有效。

请帮助我了解我在这里遗漏了什么以及我该如何完成这项工作?

这是我的代码:

Declare @string varchar(MAX) = 'C:\Users\akoga_000\Desktop\test1.xlsx'
DECLARE @sqlString AS varchar(MAX)=

'insert into gameIt_DBSummer.dbo.tblUser 
select * from openrowset(
''Microsoft.ACE.OLEDB.12.0'',
 ''EXCEL 12.0;DataBase=''
 '+cast(@string as varchar(max))+'
 '';Extended Properties="EXCEL 12.0 Xml;HDR=YES'',
 ''SELECT * FROM [Sheet1$]''
)';

EXEC (@sqlString)

//我也尝试过使用 EXEC sp_executesql 和其他选项中的 nvarchar 变量

这里是错误:

Msg 102, Level 15, State 1, Line 5
Incorrect syntax near 'C:'.

我认为您收到该错误是因为您需要在路径周围加两个额外的“”字符(@string 变量)。试试这个:

Declare @string varchar(MAX) = 'C:\Users\akoga_000\Desktop\test1.xlsx'
DECLARE @sqlString AS varchar(MAX)=
'insert into gameIt_DBSummer.dbo.tblUser 
select * from openrowset(
''Microsoft.ACE.OLEDB.12.0'',
 ''EXCEL 12.0;DataBase=''''
 '+@string+'
 '''';Extended Properties="EXCEL 12.0 Xml;HDR=YES'',
 ''SELECT * FROM [Sheet1$]''
)';
select @sqlString