我需要使用 OpenRowset 函数将多个文件(file1、file2、file3...)上传到 sql server 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);