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$
一直通不过的。。求大神帮忙!
展开
 我来答
Andy_Sun321
推荐于2016-04-02 · TA获得超过1376个赞
知道小有建树答主
回答量:811
采纳率:89%
帮助的人:727万
展开全部
变量放在字串中是不会起作用的. 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文件查询资料的操作, 你的插入操作类似修改就可以了.

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式