首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何递归读取所有记录并按级别深度TSQL显示

递归读取所有记录并按级别深度显示是一个常见的数据库查询需求,可以使用T-SQL(Transact-SQL)语言实现。以下是一个示例查询,用于递归读取所有记录并按级别深度显示:

代码语言:sql
复制
WITH RecursiveCTE (ID, ParentID, Name, Depth)
AS
(
    SELECT ID, ParentID, Name, 0 AS Depth
    FROM TableName
    WHERE ParentID IS NULL
    UNION ALL
    SELECT Child.ID, Child.ParentID, Child.Name, Parent.Depth + 1 AS Depth
    FROM TableName AS Child
    INNER JOIN RecursiveCTE AS Parent ON Child.ParentID = Parent.ID
)
SELECT ID, ParentID, Name, Depth
FROM RecursiveCTE
ORDER BY Depth, Name

在这个查询中,我们使用了一个公共表表达式(CTE)来定义一个递归查询。首先,我们从根节点开始,然后递归地查询所有子节点。在每个递归步骤中,我们将父节点的深度加1,以便在最终结果中按深度排序。

请注意,这个查询假设您的表格具有以下结构:

  • ID:每个记录的唯一标识符
  • ParentID:每个记录的父记录的标识符
  • Name:记录的名称

您需要将“TableName”替换为您的表格名称。

在使用递归查询时,请注意可能存在的性能问题。如果您的表格非常大,递归查询可能会导致性能下降。在这种情况下,您可以考虑使用其他技术,如游标或临时表,来实现相同的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

T-SQL进阶:超越基础 Level 9:动态T-SQL代码

为了更好地了解动态TSQL,我们来看几个例子。 创建简单的T SQL 对于如何创建动态TSQL的第一个例子,我们来考虑以下情况。 假设您有一个应用程序,用户界面允许用户从下拉列表中选择要读取的表。...Listing 1中的代码显示了一种使用动态TSQL代码从AdventureWorks.Sales.SalesOrderDetail表中返回TOP 10记录的方法。...当我需要构建动态TSQL以进行数据库维护时,通常会读取系统视图,然后生成显示和/或执行的脚本。 假设您是已经接管了数据库的DBA,并且您要删除在数据库中创建的多个测试表。...为了演示如何读取sys.tables视图并生成相应的DELETE语句,我们来看看Listing 2中的代码。...假设我的应用程序有一个数据选择屏幕,最终用户可以输入一个包含在ProductName中的文本字符串,然后应用程序将返回包含输入的文本字符串的所有Product表格记录

1.9K20

内存数据库 mysql-mysql in memory_In-Memory:内存数据库

2016后半年,由于项目需要支持数据的快速更新和多用户的高并发,我试水SQL Server 2016的In-Memory OLTP,创建内存数据库实现项目的需求,现在项目接近尾声,系统运行稳定,写一篇博客,记录一下使用内存数据库的经验...只有在数据库恢复时,数据库引擎才会从该副本中读取数据。   ...产生Disk IO操作,将数据从Disk读取到内存,或者将数据更新异步写入到Disk中。   ...,以单个事务运行;在事务成功时,所有语句都提交成功;在事务失败时,所有语句都回滚。...使用Atomic Block必须设置两个选项:    LEVEL:指定Atomic Block开启事务的隔离级别,通常指定隔离级别;   :指定SP上下文的语言;   3,解释型SP和本地编译SP的区别

2.1K10
  • MSSQL 2014 TDE透明加密的使用

    数据库启动记录存储该密钥,供还原时使用。 DEK 是对称密钥,由服务器的 master 数据库存储的证书或 EKM 模块所保护的非对称密钥提供保护。TDE 保护静态数据,也就是数据和日志文件。...SMK 保护存储在用户数据库级别的数据库主密钥 (DMK,database master key),并保护证书和非对称密钥。 这些密钥反过来又保护对称密钥,进而保护数据。...下面的示例演示如何启用和关闭TDE-- 备份数据库后续用于测试USE master;GOBACKUP DATABASE TSQL2008    TO DISK = N'D:\TSQL2008.bak'    ...运行下面的T-SQL语句来获得所有加密数据库的详细信息。...一旦上述命令成功执行,那么TSQL2008 数据库的加密状态将改变为 未加密,但是tempdb仍然显示为加密的。

    11610

    T-SQL—理解CTEs

    使用多重CTEs对于复杂的TSQL逻辑而言,让我们将代码放到更容易管理的细小部分里面分隔管理。...锚成员开启递归成员,这里你可以把锚成员查询当做一个没有引用CTE的查询。而递归成员将会引用CTE。这个锚成员确定了初始的记录集,然后递归成员来使用这个初始记录集。...来看看我将如何使用递归CTE吧,在Listing7中: USE tempdb; GO WITH ReportingStructure(MgrID, EmpID, EmpName, Position, OrgLevel...何时使用CTE 当然我们学习了如何使用CTE就要知道什么时候来使用它,下面三种情况是使用CTE简化你的T-SQL语句的情况: 查询中需要递归 查询中有多个子查询,或者你有重复的相同的子查询在单一语句中。...查询时复杂庞大的 总结 CTE的功能为SQLServer 提供了强大的补充,它让我们可以将复杂的代码切成很多易于管理和读取的小的代码段,同时还允许我们使用它来建立递归代码。

    1.4K10

    T-SQL—理解CTEs

    使用多重CTEs对于复杂的TSQL逻辑而言,让我们将代码放到更容易管理的细小部分里面分隔管理。...锚成员开启递归成员,这里你可以把锚成员查询当做一个没有引用CTE的查询。而递归成员将会引用CTE。这个锚成员确定了初始的记录集,然后递归成员来使用这个初始记录集。...来看看我将如何使用递归CTE吧,在Listing7中: USE tempdb; GO WITH ReportingStructure(MgrID, EmpID, EmpName, Position, OrgLevel...何时使用CTE 当然我们学习了如何使用CTE就要知道什么时候来使用它,下面三种情况是使用CTE简化你的T-SQL语句的情况: 查询中需要递归 查询中有多个子查询,或者你有重复的相同的子查询在单一语句中。...查询时复杂庞大的 总结 CTE的功能为SQLServer 提供了强大的补充,它让我们可以将复杂的代码切成很多易于管理和读取的小的代码段,同时还允许我们使用它来建立递归代码。

    2K90

    使用SQL Shell界面(二)

    要删除所有号码分配,请使用#CLEAR并在显示的提示符下确认此操作。这将删除所有先前的号码分配,并从1重新开始号码分配。通过名字回调可以选择为SQL语句分配名称,然后按名称重新调用该语句。...要删除当前命名空间的所有全局名称分配,请在显示的PROMP下使用清除并确认此操作保存到文件要将文件名分配给最新的SQL语句,请使用SQL Shell命令保存名称。...TSQL)commandprefix (TSQL)noneResult Output Display ModedisplaymodeCurrent DeviceDisplay PathdisplaypathnoneDisplay...InterSystems IRIS创建这种类型的文件,将查询数据写入该文件,并在可能的情况下启动适当的程序来显示该查询数据文件。 对于除TXT之外的所有选项,将创建第二个文件来记录结果集消息。...准备和执行指标以运行时间(以毫秒为单位)、全局引用总数、执行的命令总数和磁盘读取延迟(以毫秒为单位)来衡量。设置DISPLAYMODE不会改变SET MESSAGES=ON时显示的信息。

    1.6K20

    B+Tree index structures in InnoDB(7.InnoDB中B+树的索引结构)

    现在,我们将通过一些实际示例来研究InnoDB如何在逻辑上构造索引。 B+树的一些术语:根、叶子和层 InnoDB中使用B+树结构做为索引。当数据不能装入内存并且必须从磁盘读取的时候,B+树特别有效。...因为它确保访问请求的任何数据都需要固定的最大读取次数。这只基于树的深度,而树的深度可以很好的伸缩。 索引树从一个根页面开始,它的位置是固定的,永久存储在InnoDB的数据字典中。做为访问该树的起点。...所有树的分支都具有相同的深度。 InnoDB给树中的每个页面都分配一个级别,叶子页面被分配为0级,级别在树种递增。根页面级别基于树的深度。...在页面中,都包含一个指向下一个记录的指针。它存储下一个记录的offset。该链表从infimum开始,按key的升序链接所有记录,到supermum结束。...如前所述,每个级别上的所有页都是双向链接,并且在每个页中,记录都是安升序单向链接的,非叶子页包含的指针包含子页号,而不是非KEY行数据。

    79711

    数据库知识学习,数据库设计优化攻略(九)

    3.2.3 索引 索引是一个表优化的重要指标,在表优化中占有极其重要的成分,所以将单独写一章”SQL 索引一步到位“去告诉大家如何建立和优化索引 3.2.4 主键和外键的必要性 主键与外键的设计,在全局数据库的设计中...且经过编译和优化,执行速度快,易于维护,且表的结构改变时,不影响客户端的应用程序 2、使用存储过程,视图,函数有助于减少应用程序中 SQL 复制的弊端,因为现在只在一个地方集中处理 SQL 3、使用数据库对象实现所有的...TSQL 有助于分析 TSQL 的性能问题,同时有助于你集中管理 TSQL 代码,更好的重构 TSQL 代码 3.2.6 传说中的‘三少原则’ ①:数据库的表越少越好 ②:表的字段越少越好 ③:字段中的组合主键...3.2.7 分割你的表,减小表尺寸 如果你发现某个表的记录太多,例如超过一千万条,则要对该表进行水平分割。水平分割的做法是,以该表主键的某个值为界线,将该表的记录水平分割为两个表。...D、少用 TEXT 和 IMAGE,二进制字段的读写是比较慢的,而且,读取的方法也不多,大部分情况下最好不用。 E、 自增字段要慎用,不利于数据迁移

    58230

    SQL server 2014 内存表特性概述

    从内存读取表中的行和将这些行写入内存。 整个表都驻留在内存中。表数据的另一个副本维护在磁盘上,但仅用于持续性目的。...行版本控制用于实现对同一行的并发读取和写入,注意此处是并发。 如表tb1有三行:r1、r2 和 r3。 r1 有三个版本,r2 有两个版本,r3 有四个版本。...非持久的内存优化表,不记录这些表的日志且不在磁盘上保存它们的数据。掉电丢失,等同mysql memory引擎。...三、性能与可伸缩 使用本机编译的存储过程获得最佳性能,解释性TSQL一般。 对于基于复杂存储过程实现逻辑,且应用较少调用的的场景,表现优异。...基于乐观并发控制形式来实现所有事务隔离级别,解决了读阻塞写的问题。Oracle是用MVCC及undo来搞定。

    1.2K20

    Python和SQL Server 2017的强大功能

    在这里,我们将尝试演示在Advanced Analytics Extension中使用Python的示例,显示数据库如何触发外部进程来对作为参数提供的数据执行活动。...有许多工具和框架可用于解决刷新问题,但是它们受到如何确定数据发生变化以及何时发生更改的问题。数据库是最好的所有能够做到这一点。...Cacher数据库具有: CacheLog和CacheIntegrationError表,以跟踪缓存何时被刷新,并且具有在缓存刷新过程中可能发生的任何错误的记录。...下图显示了每个SQL Server在其自身身份下运行的方式。 ?...所有组件放在一起 放置所有组件后,我们的WebApplication允许我们创建一个新的ProductType,并通过RESTful HTTP调用从刷新的缓存中列出相同的产品类型。

    2.8K50

    数据库角色

    数据库角色 为了帮助管理数据库级别的安全性,SQL Server具有数据库角色。就像服务器角色一样,也有两种不同类型的数据库角色:固定的和用户定义的。...db_datawriter 增加、删除或者改变数据,在用户的表里面的 db_datareader 读取所有用户的表数据 db_denydatawriter 不能添加...db_denydatareader 不能读取数据库中用户表中的任何数据。 就像固定的服务器角色一样,可以使用许多系统存储过程、命令、视图和函数来显示和管理固定的数据库角色。...清单4中的代码展示了如何使用这些系统存储过程sp_dbfixedrolepermission之一,显示与每个固定数据库角色相关联的所有权限在AdventureWorks2019数据库中,以及如何使用该存储过程显示的权限与单一...IS_MEMBER函数允许您编写TSQL代码来实现这一点。使用此函数将允许您构建一个应用程序,该应用程序根据当前用户的数据库角色为不同的数据库用户显示不同的菜单选项。

    76710

    带您理解SQLSERVER是如何执行一个查询的

    的JVM bytecode 不过,这里会产生用于访问表数据的执行计划(query plans),这些执行计划描述了如何去访问表和索引, 如何去搜索和定位表里面的行数据,如何根据SQL批处理里的SQL语句去做数据操作...GetNext() 方法返回一个数据行,它的调用次数作为 ActualRows 显示在使用 SET STATISTICS PROFILE ON 或 SET STATISTICSXML ON 生成的显示计划输出中...插入记录、删除记录、更新记录都会有相应的运算符 ? 一个执行树没有子树的情况 ? 一个执行树具有子树的情况 ?...例如:排序运算符,排序运算符在最初调用next()函数的时候不会返回任何结果因为这时候他的子节点还没有读取所有数据, 这时候需要停止执行next()函数(每个运算符创建出来就会不停调用next函数)...,直到他的子节点读取所有数据他才能对这些数据 进行排序(继续调用next()函数),取出结果集并排序 如果数据已经缓存在内存里了,SQLSERVER就不需要去磁盘里取数据,直接在内存里取数据,内存里的这块空间

    2.4K90

    15:IO之File、Properties类

    实例二:显示所有目录下的文件,也就是说只要是目录就被循环 思路:既然要显示所有文件,就是要循环每一个文件夹,找出所有文件,这里操作文件夹的动作都是一样的,所有需要用到递归:      * 显示所有目录下的文件...,并按照指定过滤器,进行过滤, 将过滤后的内容存储到指定容器List中。...思路:   1、对指定目录进行递归   2、获取递归过程中所有的java文件   3、把路径存放在集合中   4、把集合中的数据写入文件 * 将一个指定目录下的java文件的绝对路径,存储到一个文本文件中...* * 思路: * 1、对指定目录进行递归 * 2、获取递归过程中所有的java文件 * 3、把路径存放在集合中 * 4、把集合中的数据写入文件 */ public class...*  * 3,如何使用这个计数器呢?  * 首先,程序启动时,应该先读取这个用于记录计数器信息的配置文件。  *  获取上一次计数器次数。 并进行试用次数的判断。

    83680

    Oracle优化10-SQL_TRACE

    其中消耗CPU的资源0S,总耗时0S,物理读取了0个数据块(说明是从内存中读取的),一致性读取了12个数据块,没有发生current方式的读取(通常update的操作会发生current读取),一共提取数据记录数为...---- 下面的部分是对这个SQL_TRACE期间所有递归SQL(NON-RECURSIVE STATEMENTS)的执行信息统计汇总 ?...比如对SQL进行分析,需要读取一些数据字典来获取相关的信息,比如是否有权限,对象是否存在,对象的存储信息等,这些SQL都统称为递归SQL语句 下面是所有递归SQL语句的统计信息 ?...PARSING IN CURSOR 部分 len=138: 被分析SQL的长度 dep=0 :产生递归SQL的深度 uid=49 :user id oct=3 :Oracle command..., cu=0:current方式读取的数据块, mis=1:cursor miss in cache 硬分析的次数, r=0:rows处理的行数, dep=0:depth递归SQL的深度

    81630

    SQLServer 远程链接MySql数据库详解

    据说,EXPRESS版第一次登陆默认只能为Windows身份验证登陆,我没注意这个问题,如果真遇到这个问题,参考文档“SQLServer 2005Windows验证如何改为混合模式验证”。...消息 53,级别 16,状态 1,第 0 行 命名管道提供程序: 无法打开与 SQL Server 的连接 [53]....命令行,键入 netstat –an –p tcp 没找到0.0.0.0:1433的信息, 2.键入telnet localhost 1433 测试,连接失败 参数说明: -an 显示所有连接的端口并用数字表示...: 在TCP/IP不可用时,或者没有提供域名服务(DNS)的服务器从而无法把服务器名解析成TCP/IP下的地址时,Named Pipes可能会非常有用.Named Pipes的使用正在减少.既然无论如何都要启用...这里所有的设置完成之后,重新启动截图中的”SQL Server2005服务” ? ?

    9.6K10

    【Keras教程】用Encoder-Decoder模型自动撰写文本摘要

    【导读】这篇博文介绍了如何深度学习框架Keras上实现文本摘要问题,探讨了如何使用编码器-解码器递归神经网络体系结构来解决文本摘要问题,如何实现文本摘要问题的不同的编码器和解码器,博文通俗易懂,专知内容组整理出来...引用:这个模型旨在使用两个层面的两个双向RNN来捕获这个两个重要级别的概念,一个在单词级别,另一个在句子级别。注意力机制同时在两个层面上运作。——抽象句摘要的神经注意力模型,2015。...读取源文本实现模型 ---- 在本节中,我们将看看如何在Keras深度学习库中实现用于文本摘要的编码器-解码器结构。...备选2:递归模型A. 第二种可供选择的模型是开发一个生成单个单词预测并递归调用它的模型。 也就是说,解码器使用上下文向量以及到输入为止产生的所有单词的分布式表示,以便产生下一个单词。...) 概要: 在本教程中,您了解了如何在Keras深度学习库中实现文本摘要的编码器-解码器结构。

    3.1K50

    让Python自动下载网站所有文件

    如何从这样的网站上下载所有的文件,并按网站的目录结构来保存这些文件呢? 关键词:Python、下载、正则表达式、递归。...思路:由于目录的深度不固定,也不可能穷举,且每一个目录的处理方式和子目录父目录的处理流程都是一样的,因此我们可以使用递归来下载所有文件。...2、如果给定 url 不是文件,那么访问该 url,并获取它下面的所有链接。 3、遍历步骤 2 产生的所有链接,递归的执行步骤 1 和 2,直到程序运行结束。...这里可采用分层递归,一开始时先获取网站的所有一级 url 链接,顺序遍历这些一级 url 链接,执行上述的 get_file(url) ,每访问一次一级 url 就将其索引位置加1(索引位置默认为0,存储在文件中或数据库中...),程序中断后再运行时先读取索引,然后从索引处开始执行即可。

    4.1K41

    一道Postgresql递归树题

    不行不行,SQL太复杂,后面也没法排序这是个问题 思考三:使用递归函数,但是递归通常只取出指定记录下级及分支级记录,如果整体取出SQL太复杂(涉及到循环排序)。。。...虽说递归解决了问题的第一步,后面我又碰到了问题的下一个重点:如何实现树结构字段列,终于我从实践中找到了三个解决方案: 方案一: 将递归后的结果按虚拟列(递归顺序列)及p_id列排序,这样貌似很简单...10005 主干路 2 2 10006 次干路 2 2 10007 支路 2 2 10008 城市下立交区 2 2 3 应急响应等级 0 3 注:我将id及p_id改为varchar类型并插入两行记录...下面我就放出个人觉得合适的方案 方案二 使用递归+array函数将每次循环时产生的depth(虚拟字段)及id字段放进path(虚拟字段)并按其排序 SQL实现语句 WITH RECURSIVE...__+__窗口函数__将每次循环时产生的depth(虚拟字段)及窗口函数产生的序列放进path(虚拟字段)并按其排序 SQL实现语句 WITH RECURSIVE T (id, name, p_id

    47640

    2017年深度学习领域阅读量最高的11篇文章

    转移学习以及在深度学习中使用预先训练的模型 使用工具:Keras 级别:高级 在当今世界,用于机器的RAM非常便宜,易于使用,而且投入又少。...深度学习的基础知识:递归神经网络介绍 使用工具:Keras 级别:中级 有时候,信息序列就是数据本身。如果我们想把这些数据合理地输出,就需要一个网络,访问跟该数据相关的信息,以完整地理解数据。...这个网络就是递归神经网络。 本文介绍递归神经网络。为方便起见,作者在Excel中展示了递归神经元的工作过程。作者还讨论了递归神经网络的一些缺点,并给出了相应的算法。...所有这些都是通过使用“Word嵌入”或“文本数字表示”来实现的。 在这篇文章中,你会看到什么是正式的 Word 嵌入及其不同类型, 以及如何实现任务, 如高效地显示 Google 搜索结果。...我们用心观察和记录教育在这个时代的蜕变;努力把前沿的动态、最新的进展、先进的观点带到你面前,希望与你一起思考和探索。我们相信,长出AI翅膀的教育,会创造出无限可能。

    1K80

    那些年我们写过的T-SQL(中篇)

    集合操作符涉及的查询应该有相同列数,并对应列具有兼容类型(即低级别数据可以隐式的转化为高级别数据,如int->bigint),查询的列名称由第一次查询决定(在其中设置列别名)。...SELECT字句阶段,那么也就是说所有的信息仍然都在,可以支持各种细粒度的操作。...此外,开窗函数能够定义顺序,并不会和显示数据时的排序混淆。...顺序字句,ORDER BY:定义窗口中的排序,但不要和显示排序混淆,窗口排序是针对之后的窗口框架的,无论如何不要忘记字句的逻辑处理顺序,外部的ORDER BY字句是在SELECT字句后的。...,LEAD获取后一条记录,不得不说设计的小伙伴那天"脑袋不小心被门夹了下",哈哈 聚合开窗函数 看到之后的例子,你会感觉开窗函数和人类的自然语言很像,获取每个订单、所有订单的运费总和 SELECT orderid

    3.7K70
    领券