Sql server 2008 在SQLServer2008中存储网站层次结构
我想在表中存储网站页面层次结构 我想要实现的是高效Sql server 2008 在SQLServer2008中存储网站层次结构,sql-server-2008,Sql Server 2008,我想在表中存储网站页面层次结构 我想要实现的是高效 1) 按路径解析(最后有效)项(例如“/blogs/programming/tags/asp.net,sql server”、“/blogs/programming/hello world”) 2) 获取面包屑的祖先项目 3) 编辑一个项目而不更新整个子项树、子项树等 因为第三点,我认为桌子可能是这样的 ITEM id type slug title parentId 1
1) 按路径解析(最后有效)项(例如“/blogs/programming/tags/asp.net,sql server”、“/blogs/programming/hello world”)
2) 获取面包屑的祖先项目
3) 编辑一个项目而不更新整个子项树、子项树等 因为第三点,我认为桌子可能是这样的
ITEM
id type slug title parentId
1 area blogs Blogs
2 blog programming Programming blog 1
3 tagsearch tags 2
4 post hello-world Hello World! 2
我是否可以使用Sql Server的hierarchyid类型(特别是第1点,“/blogs/programming/tags”是最后一个有效项)?树的深度通常在3-4左右
实现这一切的最佳方法是什么?您这样做似乎很好,可以使用CTE递归函数为您创建层次结构 差不多
DECLARE @ITEM TABLE(
id INT,
type VARCHAR(20),
slug VARCHAR(50),
title VARCHAR(50),
parentId INT
)
INSERT INTO @ITEM SELECT 1,'area','blogs','Blogs', NULL
INSERT INTO @ITEM SELECT 2,'blog','programming','Programming blog',1
INSERT INTO @ITEM SELECT 3,'tagsearch','tags',',',2
INSERT INTO @ITEM SELECT 4,'post','hello-world','Hello World!',2
;WITH Items AS (
SELECT *,
CAST('/' + slug + '/' AS VARCHAR(50)) PathVal
FROM @ITEM
WHERE parentId IS NULL
UNION ALL
SELECT i.*,
CAST(Items.PathVal + i.slug + '/' AS VARCHAR(50))
FROM Items INNER JOIN
@ITEM i ON i.parentId = Items.ID
)
SELECT *
FROM Items