t-sql中新建存储过程,向在单引号内的参数添加定义的参数的问题。具体见代码

create procedure exceltosql
@fileth varchar(100)
as
insert into staff select * from OPENDATASOURCE('Microsoft.Ace.OLEDB.12.0',
'Data Source=C:\Users\Chang\Desktop\第XX期人员信息.xlsx;Extended Properties=Excel 8.0')...Sheet1$
go
其中 “C:\Users\Chang\Desktop\第XX期人员信息.xlsx”由filepath代替,但是如果写成
insert into staff select * from OPENDATASOURCE('Microsoft.Ace.OLEDB.12.0',
'Data Source=@filepath;Extended Properties=Excel 8.0')...Sheet1$
一直通不过的。。求大神帮忙!

变量放在字串中是不会起作用的. OPENDATASOURCE的第二个参数要使用@filepath这个变量值, 那么写成字符串相加:
insert into staff select * from OPENDATASOURCE('Microsoft.Ace.OLEDB.12.0',
'Data Source=' + @filepath + ';Extended Properties=Excel 8.0')...Sheet1$追问

谢谢了,但是那样的话提示 “'+' 附近有语法错误。应为‘)’”

追答

这是因为OPENDATASOURCE不支持变量参数, 必须固定写好. 再想想办法 ...

办法就是: 使用sp_executesql来执行动态生成的SQL语句. 示例:

declare @fileName nvarchar(100), @s nvarchar(2000)
set @fileName = 'e:\t01.xls'
set @s = 'SELECT * FROM OpenDataSource (''Microsoft.Jet.OLEDB.4.0'', ''Data Source="' + @fileName + '";Extended properties=Excel 8.0'')... [Sheet1$]'
execute sp_executesql @s

 该示例只执行从Excel文件查询资料的操作, 你的插入操作类似修改就可以了.

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答