我想用SP输入我的表名,以便从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
答案 0 :(得分:3)
我看到两件事情是不对的。
首先你做
INSERT INTO @Tablename
您不能在该地方使用变量。相反,你应该使用像这样的动态SQL
exec
('
INSERT INTO ' + @Tablename + ' SELECT * FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',
''Excel 8.0;Database=C:\..\..\..\packages\@Tablename.xls'', ''select * from myTable'')
')
请注意,您必须在字符串内部使用双引号,例如''。需要“转义”单引号,因为如果你没有,它会发出字符串结束的信号。
第二个看似不对的是第二个参数,你把@Tablename放在哪里
'Excel 8.0;Database=C:\..\..\..\packages\@Tablename.xls', @Tablename)
您应该将以下内容作为第二个参数
'SELECT * FROM [Sheet2$]'
Sheet2是excel中的工作表
尝试一些变化并注意sql解析器在出现错误时给出的反馈。祝你好运!