sql - 从 Root 更新一个类别的所有子类别(最高 N 级)
问题描述
我有下面的表结构,它模仿 FileExplorer 中的文件夹层次结构(就像类别子类别一样)。现在我的要求是通过复制根容器 id(到根的所有子文件夹)来更新根文件夹的所有子文件夹(最多 N 级)。
我知道如何更新到单个级别,但不能概括 UPDATE 语句以影响最多 n 级。任何帮助都感激不尽。谢谢
解决方案
我已经能够使用 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
推荐阅读
- ruby-on-rails - 在 Rails 教程示例应用程序中未找到 Application.js 资产
- jquery - 如何使用 jQuery 替换 URL 中的数字
- sql - 错误:关系“shemaname.trame”不存在 SQL 状态:42P01
- php - 面临安装memcache php,centos 6的问题
- javascript - 如何暂停或停止音频和/或视频 onPageChange
- javascript - 如何在本机反应中更改对象属性的JavaScript数组
- .htaccess - 使用 .htaccess 强制 www 无法按预期工作
- c# - 使用 selenium 读取浏览器日志时出现 System.NullReferenceException
- sql - 获取不同查找值的行数
- git - 是否有等效于“git add -f”的 JGit?