如何使用批量插入根据文件扩展名导入文件?

时间:2013-12-07 02:11:40

标签: sql sql-server import bulkinsert

我有一个文件夹,每小时创建一个新的日志文件。每次文件名都不同。如何基于任何具有扩展名.log的文件批量插入?这是我的代码

select * from [data_MaximusImport_t]
BULK
INSERT Data_MaximusImport_t
FROM 'C:\Program Files (x86)\DataMaxx\*.log'
WITH
(FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
) 

现在我收到错误* .log“无法打开。操作系统错误代码123(文件名,目录名或卷标语法不正确。)。

***这是对原始问题的修改。我能够用这段代码找出文件名

DECLARE @Path varchar(256) = 'dir C:\datamaxx\*.log'
DECLARE @Command varchar(1024) =  @Path + ' /A-D  /B'
INSERT INTO myFileList
EXEC MASTER.dbo.xp_cmdshell @Command
SELECT * FROM myFileList

现在我只需要弄清楚如何在路径中粘贴该名称。我应该将文件名作为变量吗?

2 个答案:

答案 0 :(得分:5)

你需要动态SQL。

假设文件名已经在myFileList中,那么我就是这样做的:

DECLARE @sql As VARCHAR(MAX);
SET @sql = '';

SELECT @sql = @sql + REPLACE('
    BULK INSERT Data_MaximusImport_t
    FROM ''C:\Program Files (x86)\DataMaxx\*''
    WITH (FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'' );
    ', '*', myFileName) 
FROM    myFileList
WHERE   myfileName != '';

PRINT @sql;
EXEC(@sql);

答案 1 :(得分:-1)

遗憾的是,您无法在SQL Server批量插入的文件路径中使用通配符。

可能的解决方法是编写循环脚本以从系统获取文件名并一次插入一个或使用SSIS