Rob*_*Rob 3 sql-server recursion stored-procedures
我正在尝试列出虚拟目录及其子目录中的所有文件。这可能是有下属公司的员工,这不是文件系统。也许递归存储过程可能不是答案。
场景:
DirId, ParentId
FileId, DirId
ParentId
是父目录,而根目录具有parentId = NULL
...认为这是自我解释。
现在的问题...我想要一个目录及其子目录中存在的列表文件。
对于一个目录,我将创建一个存储过程:
SELECT * FROM Files Where DirId = ????
Run Code Online (Sandbox Code Playgroud)
那么我将如何创建一个存储过程以包含子目录?目前,我正在使用C#代码并遍历每个目录。我更喜欢使用存储过程...除非您证明我错了。
看看使用CTE。
就像是
DECLARE @Directory Table(
DirId INT,
ParentId INT
)
DECLARE @Files Table(
FileId INT,
DirId INT
)
INSERT INTO @Directory SELECT 1, NULL
INSERT INTO @Directory SELECT 2, 1
INSERT INTO @Directory SELECT 3, 1
INSERT INTO @Directory SELECT 4, 2
INSERT INTO @Files SELECT 1, 1
INSERT INTO @Files SELECT 2, 1
INSERT INTO @Files SELECT 3, 2
INSERT INTO @Files SELECT 4, 2
INSERT INTO @Files SELECT 5, 3
INSERT INTO @Files SELECT 6, 3
INSERT INTO @Files SELECT 7, 4
INSERT INTO @Files SELECT 8, 4
;WITH Directories AS (
SELECT DirId,
ParentID
FROM @Directory
WHERE DirId = 2
UNION ALL
SELECT d.DirId,
d.ParentID
FROM @Directory d INNER JOIN
Directories p ON d.ParentId = p.DirId
)
SELECT *
FROM Directories d INNER JOIN
@Files f ON d.DirId = f.DirId
Run Code Online (Sandbox Code Playgroud)