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

正しくないことが 2 つあります。

まずあなたがする

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'')
')

文字列内で '' のような二重引用符を使用する必要があることに注意してください。一重引用符を「エスケープ」する必要があるのは、そうしないと文字列の終わりを知らせるからです。

正しくないように思われる 2 番目のことは、@Tablename を置く場所の 2 番目の引数です。

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

2 番目の引数として、次のようなものが必要です。

'SELECT * FROM [Sheet2$]'

Sheet2 は Excel のシートです

いくつかのバリエーションを試し、エラーが発生した場合に SQL パーサーが提供するフィードバックに注意してください。幸運を!

于 2012-05-21T22:48:37.613 に答える