2006/09/03

MS T-SQL之CTE應用在Recursive上

今天在研究CTE(Common Table Expression)的使用,意外得知可使用在Recursive上,
因此建立了簡單的Sample如下:

假設有一個TreeData的Table與Recursive的Table
Create Table TreeData(
testId [int] Identity(1,1) Not Null,
testData [nvarchar](max) Not Null Default N'xxx'
)

Create Table Recursive(
parentId [int] Not Null,
childId [int] Not Null
)

其中TreeData包含各節點的資料:
1 aa
2 bb
3 cc
4 dd
5 ee

而Recursive代表了樹狀關係
1 2
1 3
2 4
4 5

也就表示為這樣的樹狀結構
1┬2─4─5
└3

利用CTE建立T-SQL的查詢語法如下:

with tmp(testId,Data)
as(
select testId,testData From treeData where testid=2
union all
select treeData.testId,testData From treeData inner join Recursive On treeData.testId = Recursive.ChildId Inner Join tmp on Recursive.ParentId = tmp.testId
)
select * from tmp

依照不用的條件下,可找到以此條件之下的所有字節點,(如上面例子將找出2,4,5)
可在Stored Procedure特殊用法時使用。
張貼留言

My World