t-sql中新建存储过程,向在单引号内的参数添加定义的参数的问题。具体见代码
createprocedureexceltosql@filethvarchar(100)asinsertintostaffselect*fromOPENDATASOURC...
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$
一直通不过的。。求大神帮忙! 展开
@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$
一直通不过的。。求大神帮忙! 展开
1个回答
展开全部
变量放在字串中是不会起作用的. OPENDATASOURCE的第二个参数要使用@filepath这个变量值, 那么写成字符串相加:
insert into staff select * from OPENDATASOURCE('Microsoft.Ace.OLEDB.12.0',
'Data Source=' + @filepath + ';Extended Properties=Excel 8.0')...Sheet1$
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文件查询资料的操作, 你的插入操作类似修改就可以了.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询