OpenRowset 関数を使用して、複数のファイル (file1、file2、file3...) を SQL サーバー DB のテーブル (Table1、table2、table3...) にアップロードする必要があります。すべてのファイルは C:\download に保持されます。次のクエリを使用すると正常に動作します。
INSERT INTO dbo.Table1
SELECT * from OpenRowset('MSDASQL','Driver={Microsoft Text Driver (*.txt;*.csv)};DefaultDir=C:\download;','select * from File1.csv' )
問題は、ファイル名とテーブル名をパラメーターとして渡す方法です。
トニーさん、ご回答ありがとうございます。次のようにSQLをストアドプロシージャに入れました。しかし、元のハードコードされたファイルやテーブル名よりもはるかに遅くなります。実行を高速化するための提案はありません。
ALTER proc [dbo].[ImportFiles]
@FilePath varchar(100) ,
@FileName varchar(100),
@TableName varchar(250)
AS
BEGIN
DECLARE @SqlStmt nvarchar(max)
DECLARE @ErrorCode int
SET @SqlStmt='Truncate table dbo.[' + @TableName +']'
EXEC(@SqlStmt);
-- i COULD PUT TRUNCATE statement in the sate statement as insert just before INSERT INTO.
set @SqlStmt=N'
INSERT INTO '+@TableName+N'
select *
from openrowset(''MSDASQL''
,''Driver={Microsoft Access Text Driver (*.txt, *.csv)};
DefaultDir='+@FilePath+N'''
,''select * from "'+@FileName+N'"'')'
EXEC(@SqlStmt);