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