【问题标题】:Using dynamic sql in openrowset produces error在 openrowset 中使用动态 sql 会产生错误
【发布时间】:2016-01-06 08:29:13
【问题描述】:

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

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

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

可能是OPENROWSET不接受字符串参数造成的 但是 - 我看到许多类似构建的代码 sn-ps 并且用户说它们可以工作。

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

这是我的代码:

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 变量以及其他选项

这是错误:

消息 102,第 15 级,状态 1,第 5 行
'C:' 附近的语法不正确。

【问题讨论】:

    标签: sql-server openrowset


    【解决方案1】:

    我认为您遇到了该错误,因为您需要在路径(@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
    

    【讨论】:

    • 感谢您的回答!我按照你的建议做了。它解决了语法错误但现在我收到另一个错误:链接服务器“(null)”的OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”返回消息“无法更新。数据库或对象是只读的."。消息 7303,级别 16,状态 1,第 1 行无法为链接服务器“(null)”初始化 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象。该文件和数据库不是只读的....有什么想法吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 2014-08-16
    相关资源
    最近更新 更多