SQL SERVER 2008 CTE生成結(jié)點(diǎn)的FullPath
更新時(shí)間:2011年10月31日 23:41:58 作者:
SQL SERVER 2008 使用CTE是經(jīng)常的事兒,有時(shí)我們想存儲(chǔ)一些冗余數(shù)據(jù),像每個(gè)結(jié)點(diǎn)的FullPath。
好的,現(xiàn)在來看如何生成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
就這么簡單,實(shí)際上有Sql server 2008中HierarchyType 也能很好的解決這個(gè)問題。我將在后面寫一些關(guān)于HierarchyType的Post.
希望這篇POST對(duì)您有幫助。
Author Peter Liu
復(fù)制代碼 代碼如下:
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
就這么簡單,實(shí)際上有Sql server 2008中HierarchyType 也能很好的解決這個(gè)問題。我將在后面寫一些關(guān)于HierarchyType的Post.
希望這篇POST對(duì)您有幫助。
Author Peter Liu
您可能感興趣的文章:
- sql server使用公用表表達(dá)式CTE通過遞歸方式編寫通用函數(shù)自動(dòng)生成連續(xù)數(shù)字和日期
- SqlServer使用公用表表達(dá)式(CTE)實(shí)現(xiàn)無限級(jí)樹形構(gòu)建
- SQL Server 公用表表達(dá)式(CTE)實(shí)現(xiàn)遞歸的方法
- 使用SqlServer CTE遞歸查詢處理樹、圖和層次結(jié)構(gòu)
- 在sqlserver中如何使用CTE解決復(fù)雜查詢問題
- SQLSERVER2008中CTE的Split與CLR的性能比較
- 使用SQLSERVER 2005/2008 遞歸CTE查詢樹型結(jié)構(gòu)的方法
- SQL?Server使用T-SQL進(jìn)階之公用表表達(dá)式(CTE)
相關(guān)文章
Windows7下Microsoft SQL Server 2008安裝圖解和注意事項(xiàng)
這篇文章主要介紹了Windows7下Microsoft SQL Server 2008安裝圖解和注意事項(xiàng),超詳細(xì)的圖文記錄哦,需要的朋友可以參考下2014-07-07
SQL Server 2008 評(píng)估期已過怎么解決
SQL Server 2008有180天的試用期,過期后會(huì)提示“評(píng)估期已過”的提示,本文給大家介紹SQL Server 2008 評(píng)估期已過的解決辦法,感興趣的朋友參考下吧2016-05-05
解決SQL Server 2008 不能使用 “.” local本地連接數(shù)據(jù)庫問題
這篇文章主要介紹了解決SQL Server 2008 不能使用 “.” local本地連接數(shù)據(jù)庫問題,需要的朋友可以參考下2018-07-07
SQL Server復(fù)制需要有實(shí)際的服務(wù)器名稱才能連接到服務(wù)器
服務(wù)器上安裝的WIN2008 R2,然后沒有在意機(jī)器名,安裝了SQL2008 R2數(shù)據(jù)庫之后,配置AD域的時(shí)候修改了機(jī)器名2013-11-11
SQL Server 2008數(shù)據(jù)庫分布式查詢知識(shí)
今天小編就為大家分享一篇關(guān)于SQL Server 2008數(shù)據(jù)庫分布式查詢知識(shí),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
SQL Server 2008 R2 為用戶權(quán)限分配的操作步驟
這篇文章主要介紹了SQL Server 2008 R2 為用戶權(quán)限分配的操作步驟,有時(shí)候我們不得不設(shè)置一些權(quán)限,例如禁止刪除等,那么就可以參考下面的方法2017-10-10
sql server 2008數(shù)據(jù)庫連接字符串大全
這篇文章主要介紹了sql server 2008數(shù)據(jù)庫的連接字符串大全,需要的朋友可以參考下2014-03-03

