看看使用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
考虑使用[递归CTE查询](http://msdn.microsoft.com/en-us/library/ms186243.aspx),也许。 – 2010-12-09 08:38:14
你想通过SQL Server访问文件系统?这通过应用程序代码更容易,更容易完成。你能解释在SQL中如何解决这个问题吗? – Oded 2010-12-09 08:39:08
为什么你要使用存储过程来完成一项明显更适合在C#等代码中执行的任务? – 2010-12-09 08:39:13