在SQL Server 实现递归】的更多相关文章

--在SQL Server 中其实提供了CTE[公共表表达式]来实现递归: Declare @Id Int Set @Id = 24;    ---在此修改父节点 With RootNodeCTE(Id,ParentId) As ( Select Id,ParentId From Dept Where ParentId In (@Id) Union All Select Dept.Id,Dept.ParentId From RootNodeCTE Inner Join Dept On RootN…
SQL SERVER似乎天然具有支持递归的属性. 1.比如说,有几次,我编写或修改存储过程的时候,为图方便,在末尾随手写上 执行这个存储过程 的语句,比如 [sql] view plaincopy ALTER PROCEDURE prd_GetData @Top INT = 10; AS SELECT * FROM [dbo].Table1  ORDER BY ID DESC; END EXEC [dbo].prd_GetData 本来应该用鼠标选定最后一行,指定它来执行,但一时手颤,没有选上就…
前言 说起这个需求,有点反常规,左边是组织机构树,右边是组织机构对应的员工列表.点击左侧组织机构时传一个组织机构ID,然后查询该组织机构以及其所属的一级节点,如果有部门直属单击节点组织机构,则挂出来员工总数,也就是说根节点不需要向下递归,只需要查询出对应的员工记录即可,相反,所以的一级节点则需要向下递归计算出所有的员工总数.刚开始只知道递归,没有具体的思路,后一个同事帮忙写了一个,后发现思路确实巧妙,所以自己拿出来再分析分享下. 思路分析 1.单击根节点不需要向下递归,那么则把单击根节点单独拿出…
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…
tab1 表结构: create tab1 ( id int primary key identity(1,1), parentid int not null, name varchar(25) ) 递归语法(利用CTE表达式): 1.根据父id递归查询子id with tem1(id,parentid,name) as( select id,parentid,name from tab1 where id = 1 union all select tab1.id,tab1.parentid,t…
WITH Date AS ( SELECT CAST('2008-08-01' AS DATETIME) da UNION ALL FROM Date WHERE da < '2008-08-21' ) ) AS c FROM Date ORDER BY da…
--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'…
要实现的效果:查询从Date From 到 To 之间的 所有日期: 示例代码如下: DECLARE @DATE_FROM DATETIME = N'2016-05-16';--N'2015-05-16';DECLARE @DATE_TO DATETIME = N'2016-05-17';WITH tmpDays AS               (                SELECT @DATE_FROM DATE_VALUE              UNION ALL       …
WITH SUBQUERY AS ( SELECT ORGID FROM OM_ORGANIZATION WHERE PARENTORGID = 'ROOT' UNION ALL SELECT B.ORGID FROM SUBQUERY A, OM_ORGANIZATION B WHERE B.PARENTORGID = A.ORGID ) SELECT DISTINCT * FROM SUBQUERY…
WITH Date AS ( SELECT CAST('2008-08-01' AS DATETIME) da UNION ALL FROM Date WHERE da < '2008-08-21' ) ) AS c FROM Date ORDER BY da WITH Temp AS ( SELECT 1 [index], REPLACE(NEWID(), '-', '') as guid UNION ALL SELECT [index] + 1, REPLACE(NEWID(), '-',…