SqlServer的递归查询 也就是 with cte查询

表结构 

表数据

SQL如下

with lmenu
as
(
 select name,id,1 as lv,cast(Name as nvarchar(max)) as name1, cast(ROW_NUMBER()over(order by getdate()) as nvarchar(10)) as orderid   from Table2 where Table2.ParentId=0
  Union all
  select a.Name ,a.ID,(b.lv+1) as lv,cast( REPLICATE(‘  ‘,b.lv*2)+ a.name as nvarchar(max)) as name1,
  cast( ( b.orderid+‘.‘+ cast(ROW_NUMBER()over(Order by GETDATE() ) as nvarchar(5))) as nvarchar(10)) as   orderid
  from Table2 as a inner join lmenu as b on a.ParentId=b.id
)
select * from lmenu  order by   orderid ;

查询结果:

时间: 2024-10-25 15:42:48

SqlServer的递归查询 也就是 with cte查询的相关文章

SQL With(递归 CTE 查询)

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

SQL With (递归CTE查询)

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

SqlServer with递归查询的使用

1.数据准备假定有一个表DiGui,有两个字段Id int ParentId intId ParentId4 05 07 02 18 515 59 714 1130 1523 1541 18104 2342 3039 3053 3967 3988 39107 39 2.目的:通过传入ParentId(=5),返回该记录的所有递归数据,即Id ParentId8 515 530 1523 1542 3039 3053 3967 3988 39107 39 3.Sql语句实现 with temp (

MySQL、SqlServer、Oracle三大主流数据库分页查询 (MySQL分页不能用top,因为不支持)

一. MySQL 数据库 分页查询MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如果给出两个参数, 第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数.例如:select * from table WHERE … LIMIT 10; #返回前10行select * from table WHERE … LIMIT

sqlserver 存储过程 递归查询分组+hierarchyid重建会员关系

CREATE PROCEDURE [dbo].[GetGroupInfo] @s_code NVARCHAR(16) = 0 --会员卡号 AS BEGIN declare @p int; --查询唯一性结果 declare @sql nvarchar(1000); --拼接查询sql字串 set @sql='SELECT @p=n_teamlevel FROM t_user_basic WHERE s_code=' +@s_code; exec sp_executesql @sql,N'@p

PostgreSQL递归查询实现树状结构查询

在Postgresql的使用过程中发现了一个很有意思的功能,就是对于需要类似于树状结构的结果可以使用递归查询实现.比如说我们常用的公司部门这种数据结构,一般我们设计表结构的时候都是类似下面的SQL,其中parent_id为NULL时表示顶级节点,否则表示上级节点ID. CREATE TABLE DEPARTMENT ( ID INTEGER PRIMARY KEY, NAME VARCHAR(32), PARENT_ID INTEGER REFERENCES DEPARTMENT(ID) );

SqlServer查看表、存储过程、耗时查询、当前进程、开销较大的语句

--查看数据库中表的语句 SELECT s2.dbid , DB_NAME(s2.dbid) AS [数据库名] , --s1.sql_handle , ( SELECT TOP 1 SUBSTRING(s2.text, statement_start_offset / 2 + 1, ( ( CASE WHEN statement_end_offset = -1 THEN ( LEN(CONVERT(NVARCHAR(MAX), s2.text)) * 2 ) ELSE statement_en

SqlServer运行时占用高CPU问题查询

经常在论坛看到问高CPU的问题,沈阳463整形医院程序简单的总结一下.1,首先你要确认,高CPU是不是是SQL SERVER进程引起的还是别的进程引起的,这个很容易,直接看任务管理器.2,如果从任务管理器看出高CPU确实是用SQL SERVER引起的.3,如果是SQL SERVER引起的. 3.1SQL SERVER的一个比较BAD的执行计划引起的,比如说缺少必要的INDEX,引起了hash  join什么的.这个也分成2种:1,造成高CPU的语句已经执行结束,这个时候可以用下面的语句来检查.

SQLServer数据库之SqlServer查看表、存储过程、耗时查询、当前进程、开销较大的语句

--查看数据库中表的语句 SELECT s2.dbid , DB_NAME(s2.dbid) AS [数据库名] , --s1.sql_handle , ( SELECT TOP 1 SUBSTRING(s2.text, statement_start_offset / 2 + 1, ( ( CASE WHEN statement_end_offset = -1 THEN ( LEN(CONVERT(NVARCHAR(MAX), s2.text)) * 2 ) ELSE statement_en