SQL SERVER 2008 CTE生成结点的FullPath

2016-02-19 10:39 3 1 收藏

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐SQL SERVER 2008 CTE生成结点的FullPath,赶紧看过来吧!

【 tulaoshi.com - 编程语言 】

好的,现在来看如何生成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

来源:http://www.tulaoshi.com/n/20160219/1595378.html

延伸阅读
Microsoft SQL Server 2008将包含用于合并两个行集(rowset)数据的新句法。根据一个源数据表对另一个数据表进行确定性的插入、更新和删除这样复杂的操作,运用新的MERGE语句,开发者只需使用一条命令就可以完成。 在对两个表进行信息同步时,有三步操作必须要进行。首先我们要处理任何需要插入目标数据表的新行。其次是处理需要更新的...
Visual Studio Express和SQL Server Express系列为基础型免费程序开发环境和SQL数据库,为广大的学习爱好者带来了福音,同时还可以利用它们进行一些比较简单的系统的开发,而不用担心版权问题。其中SQL SERVER EXPRESS版本默认是关闭网络访问功能的,但它并不是不支持,也可以支持部分网络功能,对于一般的系统而言,其网络功能足已。 下面我大...
由于在SQL Server 2008中引入了新的稀疏列功能,现在就有可能把列声明为稀疏列并且任何时候在列中输入一个空值它都不会消耗任何空间。其中一个技巧是找出何时确定是否把一个列定义稀疏列。 在下面的例子中,Address Lines 1 到 3是要求的,Address Lines 4和5是不要求的但是经常使用的,Address Lines 6到8很少使用。当创建Address L...
ASP.NET利用它可以实现在线备份、还原数据库等各种功能。 由于客户的数据库和WEB服务不再同一台服务器,把网站部署在服务器上以后,运行程序,提示如下错误: Retrieving the COM class factory for component with CLSID {10020200-E260-11CF-AE68-00AA004A34D5} failed due to the following error: 80040154. 而客户又不想在这台电脑安装...
问题 有了SQL Server管理套件你就可以做你在使用T-SQL命令时可以做的任何事情了。使用图形用户界面的一个问题是要记住所有你点击过的来再次重新执行这个动作是很困难的。另一个问题是你通过图形用户界面所做的大部分事情都立即执行了,这并不总是最好的。那么该怎样捕捉SQL Server正在做什么以便我之后可以重新执行这个动作或运行这...

经验教程

263

收藏

16
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部