c# - 在 SQL Server 中使用带有 URL 部分的单个分层页面表组合 URL

标签 c# sql-server hierarchical-data

我有一个包含 4 个字段的页表;

ID | ParentID | Name | URL Part

ParentID 可以为空。空 ParentID 记录代表顶级页面。

URL 部分字段仅包含该页面的 URL。当记录包含 ParentID 时,父项的 URL 部分将添加到子项的前面。嵌套最多可能有 4 层。

例如2 行;

ID | ParentID |        Name        |    URLPart
---+----------+--------------------+-----------------
 1 |   NULL   |      Wildlife      |     wildlife
 2 |    1     | Otters and beavers |  otters-beavers 

我想在没有游标的 SQL 查询中获取第 2 行的值 /wildlife/otters-beavers。 URL 部分中省略了斜杠,但需要在组合列中分隔 url 部分。

我开始在 LINQ 中这样做,但它有点乱,所以希望可以将它移到数据库中。

感谢任何帮助,

谢谢,

尼克

最佳答案

您可以使用 Recursive Common Table Expression :

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;

关于c# - 在 SQL Server 中使用带有 URL 部分的单个分层页面表组合 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34273646/

相关文章:

C# Array.FindIndex 当前对象的索引

c# - 如何在 C# 中动态(运行时)编译和执行用户定义的公式?

sql - 在 SQL Server 2008 中,如何获取在给定表中插入数据的存储过程列表?

sql - 如果不存在数据 SQL Server 2016 添加清零行

sql - 获取月份的最后一天 (SQL Server 2008R2)

postgresql - 数据库中的分层数据 : recursive query vs. 闭包表与图形数据库

c# - WPF 指向路径几何的点

c# - .NET 返回值优化

sql-server-2008 - 用于显示分层数据的 SQL Server 查询或工具

php - 如何编写面包屑(php kohana 框架)?