我有一个文件夹,每小时都会创建新的日志文件。每次文件名都不一样。如何仅根据扩展名为 .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
现在我只需要弄清楚如何将该名称粘贴到路径中。我应该将文件名作为变量吗?
最佳答案
为此您需要动态 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 - 如何使用批量插入仅根据文件扩展名导入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20436726/