通过目录名称及其上下层级关系自动生成文件夹路径的方法

  • 亚历山高
  • 2024-03-27
  • 259 人已阅读

在数据表中有一个字段代表文件目录名称,各文件目录有父子层级关系,根据这种关系自动生成文件夹路径。

下表是数据表中目录层级关系的示例:

image.png

欲实现效果如下:

image.png

通过如下代码实现该需求:

--根据目录和上下层级关系,生成文件夹路径

WITH RecursiveCTE AS (

    SELECT cCode, cName, cUpCode, CAST('' AS NVARCHAR(MAX)) AS dirPath 

    FROM B_FileClassList WHERE cUpCode is null

    UNION ALL

    SELECT f.cCode, f.cName, f.cUpCode, CAST(rc.dirPath + f.cName + '\' AS NVARCHAR(MAX)) 

    FROM B_FileClassList f

    INNER JOIN RecursiveCTE rc ON f.cUpCode = rc.cCode

)

UPDATE B_FileClassList SET dirPath = cte.dirPath FROM B_FileClassList

JOIN RecursiveCTE cte ON B_FileClassList.cCode = cte.cCode


--根据上面生成的文件夹路径,将路径字符串的最后一个'/'去掉

UPDATE B_FileClassList 

SET dirPath=CASE WHEN CHARINDEX('\',REVERSE(dirPath))>0 

            THEN LEFT(dirPath,LEN(dirPath)-CHARINDEX('\',REVERSE(dirPath))) 

            ELSE dirPath END

Top