SQL SERVER 2008 CTE生成结点的FullPath
更新时间:2011年10月31日 23:41:58 作者:
SQL SERVER 2008 使用CTE是经常的事儿,有时我们想存储一些冗余数据,像每个结点的FullPath。
好的,现在来看如何生成FullPath:
DECLARE @tbl TABLE
(
Id int
,ParentId int
)
INSERT INTO @tbl
( Id, ParentId )
VALUES ( 0, NULL )
, ( 8, 0 )
, ( 12, 8 )
, ( 16, 12 )
, ( 17, 16 )
, ( 18, 17 )
, ( 19, 17 )
WITH abcd
AS (
-- anchor
SELECT id
,ParentID
,CAST(id AS VARCHAR(100)) AS [Path]
FROM @tbl
WHERE ParentId IS NULL
UNION ALL
--recursive member
SELECT t.id
,t.ParentID
,CAST(a.[Path] + ',' + CAST( t.ID AS VARCHAR(100)) AS varchar(100)) AS [Path]
FROM @tbl AS t
JOIN abcd AS a ON t.ParentId = a.id
)
SELECT Id ,ParentID ,[Path]
FROM abcd
WHERE Id NOT IN ( SELECT ParentId
FROM @tbl
WHERE ParentId IS NOT NULL )
返回:
Id ParentID Path
----------- ----------- ----------------------
18 17 0,8,12,16,17,18
19 17 0,8,12,16,17,19
就这么简单,实际上有Sql server 2008中HierarchyType 也能很好的解决这个问题。我将在后面写一些关于HierarchyType的Post.
希望这篇POST对您有帮助。
Author Peter Liu
复制代码 代码如下:
DECLARE @tbl TABLE
(
Id int
,ParentId int
)
INSERT INTO @tbl
( Id, ParentId )
VALUES ( 0, NULL )
, ( 8, 0 )
, ( 12, 8 )
, ( 16, 12 )
, ( 17, 16 )
, ( 18, 17 )
, ( 19, 17 )
WITH abcd
AS (
-- anchor
SELECT id
,ParentID
,CAST(id AS VARCHAR(100)) AS [Path]
FROM @tbl
WHERE ParentId IS NULL
UNION ALL
--recursive member
SELECT t.id
,t.ParentID
,CAST(a.[Path] + ',' + CAST( t.ID AS VARCHAR(100)) AS varchar(100)) AS [Path]
FROM @tbl AS t
JOIN abcd AS a ON t.ParentId = a.id
)
SELECT Id ,ParentID ,[Path]
FROM abcd
WHERE Id NOT IN ( SELECT ParentId
FROM @tbl
WHERE ParentId IS NOT NULL )
返回:
Id ParentID Path
----------- ----------- ----------------------
18 17 0,8,12,16,17,18
19 17 0,8,12,16,17,19
就这么简单,实际上有Sql server 2008中HierarchyType 也能很好的解决这个问题。我将在后面写一些关于HierarchyType的Post.
希望这篇POST对您有帮助。
Author Peter Liu
相关文章
win2008 r2安装SQL SERVER 2008 R2 不能打开1433端口设置方法
这篇文章主要介绍了win2008 r2安装SQL SERVER 2008 R2 不能打开1433端口设置方法,需要的朋友可以参考下2017-01-01SQL Server 2000向SQL Server 2008 R2推送数据图文教程
这篇文章主要介绍了SQL Server 2000向SQL Server 2008 R2推送数据图文教程,本文步骤详细,配图清晰,需要的朋友可以参考下2014-09-09sql2008设置subcategory报表参数可用值和默认值步骤分享
sql2008设置subcategory报表参数可用值和默认值步骤分享,大家参考使用吧2013-12-12SQL Server 2008 R2占用cpu、内存越来越大的两种解决方法
这篇文章主要介绍了SQL Server 2008 R2占用内存越来越大的两种解决方法,需要的朋友可以参考下2017-10-10安装sql server 2008时的4个常见错误和解决方法
这篇文章主要介绍了安装sql server 2008时的常见错误和解决方法,本文总结了4个可能问题的问题,并给出了相应的解决方法,需要的朋友可以参考下2014-09-09SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法
不是很理解为什么在2008中会加入阻止保存要求重新创建表的更改这个选项.症状表现为修改表结构的时候会"阻止"你.而且我遇到的情况是居然有的时候阻止你,有的时候不阻止你,摸不到头脑.2012-05-05当 MUST_CHANGE 为 ON (开)时,不能将 CHECK_POLICY 和 CHECK_EXPIRATION
这篇文章主要介绍了当 MUST_CHANGE 为 ON (开)时,不能将 CHECK_POLICY 和 CHECK_EXPIRATION 选项设为 OFF (关) ,需要的朋友可以参考下2015-08-08
最新评论