通过存储过程从Excel导入数据

我想用SPinput我的表名,以便从excel表导入数据并加载到数据库。 但是,收到以下错误。 你能纠正它吗? 谢谢。

create proc Up_Export ( @Tablename as varchar(20) = null ) AS SET NOCOUNT ON begin INSERT INTO @Tablename --Receiving error over here, informs incorrect syntax near @tablename SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\..\..\..\packages\@Tablename.xls', @Tablename) set nocount off end 

我看到两件事情是不对的。

首先你做

 INSERT INTO @Tablename 

你不能在那个地方使用一个variables。 相反,你应该使用这样的dynamicSQL

 exec (' INSERT INTO ' + @Tablename + ' SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', ''Excel 8.0;Database=C:\..\..\..\packages\@Tablename.xls'', ''select * from myTable'') ') 

请注意,您必须在string内使用双引号(如“'”)。 “转义”单引号是必要的,因为如果你不这样做,它将表示string的结束。

第二个看起来不正确的东西是放置@Tablename的第二个参数

 'Excel 8.0;Database=C:\..\..\..\packages\@Tablename.xls', @Tablename) 

作为第二个参数,你应该有以下的东西

 'SELECT * FROM [Sheet2$]' 

Sheet2是Excel中的表单

尝试一些变化,并注意sqlparsing器在错误的情况下给你的反馈。 祝你好运!