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

标签 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

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

最佳答案

为此您需要动态 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/

相关文章:

sql - 触发器-postgres

mysql - 如何在主选择和连接中访问子查询

sql - TRY/CATCH block 与 SQL 检查

sql - 如何使用sql server 2008从变量中选择顶行?

java - 如何访问其.java 文件没有包语句的类?

git - 如何将现有的 repos 克隆到 gitlab 中的一个组

sql - Oracle FETCH FIRST 1 ROW with UNION ALL 语句

sql - sql 中的 max 没有从数据库中得到正确的结果(使用 laravel 框架)

sql - 如何避免此子查询并创建索引 View ?

Python导入文本文件,其中每一行都有不同的列数