Мне нужно загрузить несколько файлов (file1, file2, file3 ...) в таблицы (Table1, table2, table3 ...) в базе данных сервера SQL с помощью функции OpenRowset. Все файлы хранятся в 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);