如何使用大容量插入仅根据文件扩展名导入文件



我有一个文件夹,每个小时都会创建新的日志文件。每次文件名都不同。如何仅基于任何扩展名为.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

现在我只需要想办法把这个名字粘在路径上。S我应该将文件名作为变量吗?

为此,您需要动态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);

不幸的是,您不能在SQL server大容量插入的文件路径中使用通配符。

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

最新更新