C# 在SQL Server中,从包含URL部分的页面的单个层次表组合URL
我有一个单页表,有4个字段C# 在SQL Server中,从包含URL部分的页面的单个层次表组合URL,c#,sql-server,hierarchical-data,C#,Sql Server,Hierarchical Data,我有一个单页表,有4个字段 ID | ParentID | Name | URL Part ParentID可为空。Null ParentID记录表示顶级页面 URL部分字段仅包含该页面的URL。当记录包含ParentID时,父项的URL部分将在子项的URL部分之前。嵌套可能有多达4个级别 例如,2排 ID | ParentID | Name | URLPart ---+----------+--------------------+-------------
ID | ParentID | Name | URL Part
ParentID可为空。Null ParentID记录表示顶级页面
URL部分字段仅包含该页面的URL。当记录包含ParentID时,父项的URL部分将在子项的URL部分之前。嵌套可能有多达4个级别
例如,2排
ID | ParentID | Name | URLPart
---+----------+--------------------+-----------------
1 | NULL | Wildlife | wildlife
2 | 1 | Otters and beavers | otters-beavers
我想在不带光标的SQL查询中获取第2行的值/wildren/otters beavers
。URL部分中省略了斜杠,但需要在组合列中分隔URL部分
我在LINQ开始做这个,但是有点乱,所以希望能把它移到数据库中
谢谢你的帮助
谢谢
尼克您可以使用:
如果您共享您的linq代码,您将帮助我们帮助您;)。我决定数据库就是我想做这件事的地方。我的linq是意大利面条,不值得分享:)
DECLARE @t TABLE
( ID INT NOT NULL,
ParentID INT NULL,
Name VARCHAR(255) NOT NULL,
URLPart VARCHAR(255) NOT NULL
);
INSERT @T (ID, ParentID, Name, URLPart)
VALUES
(1, NULL, 'Wildlife', 'Wildlife'),
(2, 1, 'Otters and beavers', 'otters-beavers'),
(3, 1, 'Canines', 'canines'),
(4, 3, 'dogs', 'dogs');
WITH CTE AS
( SELECT ID, ParentID, Name, URLPart, RecursionLevel = 1, FullURL = URLPart
FROM @T
UNION ALL
SELECT cte.ID,
t.ParentID,
cte.Name,
cte.URLPart,
cte.RecursionLevel + 1,
CAST(t.URLPart + '/' + cte.FullURL AS VARCHAR(255))
FROM CTE
INNER JOIN @T AS t
ON t.ID = cte.ParentID
)
SELECT ID, Name, URLPart, FullURL
FROM CTE
WHERE NOT EXISTS
( SELECT 1
FROM CTE AS CTE2
WHERE CTE2.ID = CTE.ID
AND CTE2.RecursionLevel > CTE.RecursionLevel
)
ORDER BY ID;