首页 > 解决方案 > 从 Root 更新一个类别的所有子类别(最高 N 级)

问题描述

我有下面的表结构,它模仿 FileExplorer 中的文件夹层次结构(就像类别子类别一样)。现在我的要求是通过复制根容器 id(到根的所有子文件夹)来更新根文件夹的所有子文件夹(最多 N 级)。

我知道如何更新到单个级别,但不能概括 UPDATE 语句以影响最多 n 级。任何帮助都感激不尽。谢谢

标签: sqlsql-servertsql

解决方案


我已经能够使用 CTE 达到预期的效果。下面是我用来实现所需结果的代码片段

;WITH MyCTE
AS ( SELECT FolderId, FolderName, ParentFolderId, FK_ContainerId [RootContainerId], 
FK_ContainerId
FROM tblFC_Folders
WHERE ParentFolderId IS NULL
UNION ALL
SELECT t.FolderId, t.FolderName, t.ParentFolderId, MyCTE.[RootContainerId] AS 
[RootContainerId], t.FK_ContainerId
FROM tblFC_Folders t
INNER JOIN MyCTE ON t.ParentFolderId = MyCTE.FolderId
WHERE t.ParentFolderId IS NOT NULL )
UPDATE  tblFC_Folders
SET  FK_ContainerId = MyCTE.RootContainerId
FROM tblFC_Folders t INNER JOIN MyCTE ON t.FolderId = MyCTE.FolderId
WHERE t.ParentFolderId IS NOT NULL AND t.FK_ContainerId IS NULL

推荐阅读