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

时间:2012-05-21 17:57:32

标签: sql-server excel stored-procedures

我想用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

1 个答案:

答案 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解析器在出现错误时给出的反馈。祝你好运!