2

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

1 回答 1

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

于 2012-05-21T22:48:37.613 回答