T-SQL使用CTE递归

DECLARE @DiGui TABLE ( Id INT, ParentId INT )
INSERT  INTO @DiGui
        ( Id ,
          ParentId
        )
        SELECT  1 ,
                2
        UNION
        SELECT  2 ,
                3
        UNION
        SELECT  3 ,
                4
        UNION
        SELECT  5 ,
                10
        UNION
        SELECT  1 ,
                10
SELECT  *
FROM    @DiGui ;
WITH    temp ( [Id], [parentid] )
          AS ( SELECT   Id ,
                        parentid
               FROM     @DiGui
               WHERE    [Id] = 1
               UNION ALL
               SELECT   a.Id ,
                        a.parentid
               FROM     @DiGui a
                        INNER JOIN temp ON a.[Id] = temp.[parentid]
             )
    SELECT  *
    FROM    temp

  结果:

时间: 2024-12-09 12:50:34

T-SQL使用CTE递归的相关文章

Sql Server CTE递归

WITH cte AS ( SELECT a.FNUMBER,a.FMATERIALID AS MainId,b.FMATERIALID AS ChileID,CAST(b.FMATERIALID AS VARCHAR(max)) AS lev FROM t_eng_bom a JOIN dbo.T_ENG_BOMCHILD b ON a.fid =b.FID WHERE a.fid = '100150' UNION ALL SELECT d.FNUMBER,d.MainId,d.ChileID

sql server CTE递归使用测试

--CTE递归查询 if(object_id(N'menu') > 0) drop table menu CREATE TABLE MENU ( name nvarchar(50) NOT NULL PRIMARY KEY, senior nvarchar(50) NULL ); INSERT INTO MENU values ('文件',NULL), ('新建','文件'), ('项目','新建'), ('项目11111','项目'), ('项目22222','项目'), ('项目33333'

SQL CTE 递归 查询省,市,区

IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb create table tb(id varchar(3) , pid varchar(3) , name varchar(10)) insert into tb values('001' , null , '广东省') insert into tb values('002' , '001' , '广州市') insert into tb values('003' , '001' , '深圳市') inse

sql 2种递归

alter FUNCTION f_Cid(@ID int)RETURNS @t_Level TABLE(ID int,Level int)ASBEGIN DECLARE @Level int SET @Level=1 INSERT @t_Level SELECT @ID,@Level WHILE @@ROWCOUNT>0 BEGIN  SET @[email protected]+1  INSERT @t_Level SELECT a.[MenuId],@Level  FROM [MMS_Men

SQL Server CTE 递归查询全解

在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例,递归查询主要用于层次结构的查询,从叶级(Leaf Level)向顶层(Root Level)查询,或从顶层向叶级查询,或递归的路径(Path). 一,递归查询原理 CTE的递归查询必须满足三个条件:初始条件,递归调用表达式,终止条件,CTE 递归查询的伪代码如下: WITH cte_name (

SQLServer CTE递归和循环

Create table #country (AreaNam NVARCHAR(10),BelongTo Nvarchar(10),Msg varchar(100)) INSERT INTO #countrySELECT '中国','中国',null union allSELECT '江苏','中国',null union allSELECT '南京','江苏',null union allSELECT '无锡','江苏',null union allSELECT '徐州','江苏',null

8第八章CTE递归及分组汇总高级部分(多维数据集)(转载)

8第八章CTE递归及分组汇总高级部分(多维数据集) 这里贴图太麻烦...算了 UNION 等集合操作符: UNION 等以第一个 SELECT  的 列明 作为 整个结果集的列明,整个结果集 唯一认可的 唯一逻辑处理阶段 是 ORDER BY 这个意思是说 只有 ORDER BY 是对整个结果集作用的,其它都操作都作用在 UINON 两侧的 子集合中. EXCEPT 操作符也是 提出了重复值的 此外,它认为两个 null 值是相等的, 而 NOT EXISTS 认为两个 null 值不相等, 集

SQL With(递归 CTE 查询)

本文来自:http://www.cnblogs.com/smailxiaobai/archive/2012/01/16/2323291.html 指定临时命名的结果集,这些结果集称为公用表表达式 (CTE).该表达式源自简单查询,并且在单条 SELECT.INSERT.UPDATE 或 DELETE 语句的执行范围内定义.该子句也可用在 CREATE VIEW 语句中,作为该语句的 SELECT 定义语句的一部分.公用表表达式可以包括对自身的引用.这种表达式称为递归公用表表达式.  Transa

sql server 使用公共表表达式(CTE)递归

1 with companyNodes(ParentNodeID,NodeID,NodeTypeID,level) as 2 ( 3 select n.ParentNodeID,n.NodeID,n.NodeTypeID,0 level 4 from tblclient_companyowner as o inner join tblSys_Node as n on o.NodeID=n.NodeID 5 where o.CompanyID=238 6 union all 7 select n.

关于SQL中CTE(公用表表达式)(Common Table Expression)的总结

WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到 一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让SQL语句的可读性更高些, 也有可能是在UNION ALL的不同部分,作为提供数据的部分. 特别对于UNION ALL比较有用.因为UNION