You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改SQL查询以导入C:\Files文件夹下所有XML文件至SQL Server

读取文件夹下所有XML文件并导入SQL表的修改方案

原SQL仅能读取指定的单个XML文件,要实现读取C:\Files下所有XML文件并导入Projet表,需要先获取文件夹内所有XML文件的路径,再遍历执行导入操作,具体修改如下:

步骤1:准备文件路径列表

首先创建临时表存储所有XML文件的完整路径,通过xp_dirtree系统存储过程获取目标文件夹内的XML文件:

-- 创建临时表存储XML文件路径
CREATE TABLE #XmlFiles (FilePath NVARCHAR(255))

-- 从C:\Files文件夹读取所有XML文件的完整路径
INSERT INTO #XmlFiles (FilePath)
SELECT CONCAT('C:\Files\', name) AS FilePath
FROM master.dbo.xp_dirtree('C:\Files', 1, 1)
WHERE name LIKE '%.xml'

步骤2:遍历文件执行导入

使用游标遍历临时表中的每个文件路径,动态生成导入SQL并执行:

-- 声明变量存储文件路径和动态SQL
DECLARE @FilePath NVARCHAR(255), @SQL NVARCHAR(MAX)

-- 创建游标遍历所有XML文件
DECLARE XmlFileCursor CURSOR FOR
SELECT FilePath FROM #XmlFiles

OPEN XmlFileCursor
FETCH NEXT FROM XmlFileCursor INTO @FilePath

-- 循环处理每个文件
WHILE @@FETCH_STATUS = 0
BEGIN
    -- 构建插入语句,转义路径中的单引号避免语法错误
    SET @SQL = N'
    INSERT INTO Projet (UID, nom, prenom, matricule, lien)
    SELECT
        page.value(''(item[@name="UID(Zonal OCR)"]/@value)[1]'', ''INT'') AS UID,
        page.value(''(item[@name="nom(Zonal OCR)"]/@value)[1]'', ''VARCHAR(50)'') AS nom,
        page.value(''(item[@name="prenom(Zonal OCR)"]/@value)[1]'', ''VARCHAR(50)'') AS prenom,
        page.value(''(item[@name="matricule(Zonal OCR)"]/@value)[1]'', ''VARCHAR(50)'') AS matricule,
        page.value(''(item[@name="lien"]/@value)[1]'', ''VARCHAR(100)'') AS lien 
    FROM 
        (SELECT 
             CAST(MY_XML AS xml)
         FROM 
             OPENROWSET(BULK ''' + REPLACE(@FilePath, '''', '''''') + ''', SINGLE_BLOB) AS T(MY_XML)) AS T(MY_XML)
    CROSS APPLY 
        MY_XML.nodes(''root/page'') AS MY_XML (page);'

    -- 执行动态SQL
    EXEC sp_executesql @SQL

    FETCH NEXT FROM XmlFileCursor INTO @FilePath
END

-- 清理游标和临时表
CLOSE XmlFileCursor
DEALLOCATE XmlFileCursor
DROP TABLE #XmlFiles

注意事项

  • 确保SQL Server服务账号拥有C:\Files文件夹的读取权限,否则无法访问文件
  • xp_dirtree需要在master数据库中执行,且当前账号需具备该存储过程的执行权限
  • 若文件路径包含单引号,REPLACE(@FilePath, '''', '''''')会自动转义,避免SQL语法错误
  • 可通过调整WHERE name LIKE '%.xml'的筛选条件,控制需要导入的XML文件范围

内容的提问来源于stack exchange,提问作者the bignner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:25:57