现在的位置: 首页 > 综合 > 正文

SQL Server 2005中的递归实现

2013年11月05日 ⁄ 综合 ⁄ 共 1178字 ⁄ 字号 评论关闭

WITH common_table_expression 

具体用法请参考Sql2005帮助文档(ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/tsqlref9/html/27cfb819-3e8d-4274-8bbe-cbbe4d9c2e23.htm)

指定临时命名的结果集,这些结果集称为公用表表达式 (CTE)。该表达式源自简单查询,并且在 SELECT、INSERT、UPDATE 或 DELETE 语句的执行范围内定义。该子句也可用在 CREATE VIEW 语句中,作为该语句的 SELECT 定义语句的一部分。公用表表达式可以包括对自身的引用。这种表达式称为递归公用表表达式。

语法:

[ WITH <common_table_expression> [ ,...n ] ]

<common_table_expression>::=
        expression_name [ ( column_name [ ,...n ] ) ]
    AS
        ( CTE_query_definition )
 
实例:
SELECT * INTO t --载入测试数据
FROM
(
    
SELECT 1 AS ID,'food' AS Product,0 AS ParentID UNION ALL
    
SELECT 2,'sport',0 UNION ALL
    
SELECT 3,'drink',1 UNION ALL
    
SELECT 4,'ball',2 UNION ALL
    
SELECT 5,'fruit',1 UNION ALL
    
SELECT 6,'apple',5 UNION ALL
    
SELECT 7,'banana',5 UNION ALL
    
SELECT 8,'football',4 UNION ALL
    
SELECT 9,'basketball',4 UNION ALL
    
SELECT 10,'peisi',3 UNION ALL
    
SELECT 11,'wohaha',3
AS a
GO
WITH ShowTree(ID,Product,ORDERBY) AS
(
    
SELECT ID,Product,ID FROM t WHERE ParentID=0 --固定成员
    
    
UNION ALL
    
SELECT t.ID,t.Product,ORDERBY*100+t.ID FROM ShowTree AS s
    
INNER JOIN t ON s.ID = t.ParentID
)
SELECT * FROM ShowTree ORDER BY CAST(ORDERBY AS VARCHAR(50))--OPTION(MAXRECURSION 1)

DROP TABLE t

抱歉!评论已关闭.