基于文件夹内容循环OPENROWSET语句

问题描述

我们的 sql Server (2014) 每天都会放入可变数量的统一 .XLSX 文件。任何一天,都可能有 5-20 个不同文件名的文件。值得庆幸的是,它们都有完全相同的标题标签名称

我已经编写了一个 xp_cmdshell 命令,用于提取暂存在临时表中的所有文件名的列表以及序列号。

有没有一种方法可以使用动态 sql 通过 OPENROWSET 导入所有文件来“循环”?

最终输出将包含 1 个表,其中包含所有 XLSX 文件内容

这是一个模拟加载在其中的文件名的临时表:

CREATE TABLE #FILENAMES (FILE_NME VARCHAR(100),SEQ INT ) 
INSERT INTO #FILENAMES  
VALUES
  ('WeeklyReport_20201207.xlsx',1),('WeeklyReport_20201213.xlsx',2),('WeeklyReport_20201214.xlsx',3),('WeeklyReport_20201220.xlsx',4)

这是我已经开始的 Dynamtc sql/Loop。

DECLARE @FILE_NME NVARCHAR(MAX) =  'WeeklyReport_20201220.xlsx'

DECLARE @sql NVARCHAR(MAX) = '   SELECT * FROM OPENROWSET(''MSDAsql'',''DRIVER={MICROSOFT EXCEL DRIVER (*.XLS,*.XLSX,*.XLSM,*.XLSB)}; DBQ=D:\FILES\'+@FILE_NME+''',''SELECT * FROM [SHEET1$]'') T1'

DECLARE @COUNTER INT;
SET @COUNTER = 0;

WHILE @COUNTER <= 2
BEGIN
EXEC (@sql )

   SET @COUNTER = @COUNTER + 1;
END;  

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)