玫瑰虽美,当心其刺;CTE虽好,注意其规则

Screenshot_2026-11-04-16-26-45-46.jpg 立即下载

CTE 确实很好很强大,尤其在处理递归调用方面,非常简单实用。

下面的例子就讲述了通过 CTE 递归调用获取 ParentAndChildren 表中 Folder2 的子孙节点,不过 CTE 的使用有很多规则需要注意,忽略了这些规则,它的刺可能会刺伤我们。

详细规则请参照:

http://msdn.microsoft.com/zh-cn/library/ms190766.aspx

 

这里主要讲述大家最容易忽略的一条规则:

 

•CTE 之后必须跟随引用部分或全部 CTE 列的一条 SELECT 、 INSERT 、 UPDATE 、 MERGE 或 DELETE -- 语句。也可以在 CREATE VIEW 语句中将 CTE 指定为视图中 SELECT 定义语句的一部分。

 

示例语句:

 

 

CREATE DATABASE testdb20100730

GO

USE testdb20100730;

 

CREATE TABLE ParentAndChildren

(

     Id     INT ,

     Name    NVARCHAR ( 50),

     Parent INT ,

     CONSTRAINT pk_ParentAndChildren PRIMARY KEY CLUSTERED

        (

            [Id] ASC

        ) WITH ( IGNORE_DUP_KEY = OFF ) ON [PRIMARY]

)

ON [PRIMARY]

 

INSERT INTO ParentAndChildren( Id, Name , Parent)

SELECT 0, 'root' ,null

UNION ALL

SELECT 1, 'folder1' , 0

UNION ALL

SELECT 2, 'folder2' , 0

UNION ALL

SELECT 3, 'folder3' , 0

UNION ALL

SELECT 4, 'file1' , 1

UNION ALL

SELECT 5, 'file2' , 2

UNION ALL

SELECT 6, 'folrder4' , 2

UNION ALL

SELECT 7, 'file3' , 6

UNION ALL

SELECT 8, 'folrder5' , 6

UNION ALL

SELECT 9, 'file3' , 8

 

GO

 

DECLARE @I INT ;

 

WITH cteParentChildren( Id, Name , Parent, [Level]) AS

(

    SELECT Id, Name , Parent, 0 AS [Level]

    FROM dbo. ParentAndChildren

    WHERE Parent = 0

            AND Name LIKE 'Folder2'

    UNION ALL

    SELECT e. Id, e. Name , e. Parent, Level + 1

    FROM dbo. ParentAndChildren AS e

        INNER JOIN cteParentChildren AS d ON e. Parent = d. Id

)

--DECLARE @I INT; 如果在此处声明变量 @I 就违反上述规则会报错

---SELECT @I = 1 如果此处执行 SELECT 赋值语句仍会报错,不过错误 是“ 声明了 CTE“cteParentChildren” 却没有使用 !”,此时下面的语句将不能执行

 

SELECT * FROM cteParentChildren

 

USE master;

 

DROP DATABASE testdb20100730

互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识 立即下载

相关推荐

【动态多智能体系统的通信感知编队控制】一种新颖的通信感知编队控制策略,用于动态多智能体系统研究(Matlab代码、Python代码实现)

内容概要:文档名为《Plecs全桥LLC谐振变换器仿真模型.txt》,但其内容并未深入介绍Plecs环境下全桥LLC谐振变换器的具体建模与仿真过程,而是呈现为一份涵盖多领域科研主题的资源列表。文档内容广泛涉及多智能体系统控制、无人机路径规划、电力电子变换器、状态估计、信号处理、优化算法等研究方向,并多次提及Matlab/Simulink、Python等工具的代码实现。整体来看,该文档更像是一份科研项目目录或技术资源索引,重点推介了包括LLC谐振变换器在内的多种控制系统与电力电子仿真模型,但对标题所述核心内容缺乏详尽的技术描述与实现细节。; 适合人群:电力电子、自动化、控制工程、信号处理及多智能体系统等相关领域的研究生、科研人员与工程技术人员。; 使用场景及目标:①为科研工作者提供跨学科的技术方向参考与研究选题灵感;②获取电力系统、无人机控制、信号处理等领域成熟的Matlab/Simulink或Python仿真代码资源,用于算法验证与模型复现。; 阅读建议:建议将此文档作为科研资源导航目录使用,读者可根据自身研究方向筛选感兴趣的主题,并通过文中提供的公众号或网盘链接获取完整的代码、仿真模型与配套资料进行深入学习与实践。

我的SQL编码规范

我的SQL编码规范

GRANDTREE的专栏 7640

产业园区运营负责人如何提升企业技术需求与科研资源的精准匹配效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

尽可能避免在where条件或者join时的on条件中使用case函数(T-SQL)

尽可能避免在where条件或者join时的on条件中使用case函数

GRANDTREE的专栏 4312

QTest 单元测试框架及单元测试思考

qt 单元测试框架 QTEST 及思考

一个老菜鸟的学习分享 1万+

python实现ECMS算法

ECMS(Equivalent Consumption Minimization Strategy)算法是一种用于混合动力汽车能量管理系统的优化策略。它通过计算等效油耗来平衡电池电量消耗和燃油消耗,从而优化整体能耗。以下是一个简单的Python实现,用于演示ECMS算法的基本思想。这个实现假设了一个简单的混合动力汽车模型,其中电池电量和燃油消耗是主要的优化目标。

weixin_45570158的博客 922

SQL Server二进制聚合运算性能的研究

本文分析了常见的对SQL Server整形数据进行二进制聚合运算的集中常见的方法并进行了性能测试,并给出性能最佳的方法。

GRANDTREE的专栏 2243

PCL1.12.1+VTK9.1+Qt5.14.2实战:解决QVTKOpenGLNativeWidget点云渲染窗口初始化报错问题

本文针对PCL1.12.1、VTK9.1与Qt5.14.2集成开发中,QVTKOpenGLNativeWidget点云渲染窗口初始化时出现的报错与黑屏问题,提供了深度分析与两种实战解决方案。核心在于理解VTK版本升级导致的渲染窗口类型不匹配,并指导开发者通过显式创建vtkGenericOpenGLRenderWindow或利用窗口ID嵌入,正确初始化并绑定可视化组件,从而稳定实现点云渲染。

weixin_29284657的博客 221

SQL Server的最大容量规范

原文: http://msdn.microsoft.com/zh-cn/library/ms143432.aspx  SQL Server 数据库引擎对象最大大小/数量 - SQL Server(32 位)最大大小/数量 - SQL Server(64 位)批大小165,536 * 网络数据包大小65,536 * 网络数据包大小

GRANDTREE的专栏 2124

不用写触发器!帆软填报报表自动记录创建/修改时间的终极方案

本文详细介绍了帆软填报报表中无需编写数据库触发器,即可自动记录数据创建时间和修改时间的终极方案。该方案利用帆软内置函数和单元格条件属性,在应用层实现日期自动生成,有效规避了触发器带来的权限、维护和部署难题,为数据填报提供了更轻量、灵活且易于维护的解决方案。

weixin_28040125的博客 363

爬虫Incapsula reese84加密案例:Etihad航空(纯算法)

爬虫Incapsula reese84加密案例:Etihad航空,本文就不再讲解如何找加密参数、定位加密参数,以及分析加密的一个过程。就直接从扣算法开始,扣算法前先看之前讲解的加密函数生成的过程,文章会一个函数一个函数的讲解扣算法。fiddler根据规则替换本地文件。调试过程中遇到部分环境不一样是正常的,具体还要根据自己调试的js为准,就像之前补环境时是有二十一个循环,这次扣算法多出一个循环,不过大部分环境是一样的第一个函数:通过document.addEventListener添加了很多事件。

老衲爱洗头的博客 1992

安全的使用T-SQL中的ISNULL函数

本文讲述了T-SQL中ISNULL函数使用中需要注意的事项以及如何更安全的调用。

GRANDTREE的专栏 2090

ArcGIS实验教程——实验十九:网络分析(最短路径实现)

一、实验描述 网络分析模块用于实现基于网络数据集的网络分析功能,包括路径分析、服务区分析、最近设施点分析、OD成本矩阵分析、多路径配送分析、位置分配分析和高级网络的管理与创建等。 网络数据集不同于几何网络,是一种高级的连接模型,能够展示复杂的细节,拥有丰富的网络属性模型,可以模拟网络阻力、网络限制以及网络层次等。 本实验重点演示网络分析中最短路径的实现过程。 二、实验内容 1、网络数据集...

智慧空间实验室 5681

使用Relog指令将性能计数器文件导出到Excel

使用Relog指令将性能计数器文件导出到Excel以方便分析: Relog c:/perflogs/xyz.blg -cf counter_file.txt -o c:/perflogs/xyz.csv -t 30 -f csv

GRANDTREE的专栏 1990

SMOKE 3D:从 Python 到 C++ 实现车辆与行人单目 3D 视觉识别在 RK3588 上的深度部署

SMOKE的网络结构通常基于高性能的骨干网络(如DLA-34,您使用的模型就是基于此),通过编码器-解码器架构来提取特征。输入:RGB图像(本项目为骨干网络:用于特征提取。检测头热力图分支:预测关键点热力图。通常在热力图上进行NMS来找到局部最大值,即潜在的关键点位置。回归分支:对于每个关键点位置,预测上述的8维3D属性向量。分类分支:预测每个关键点对应的物体类别。置信度分支:预测每个关键点的置信度。本教程详细介绍了SMOKE单目3D目标检测模型在RK3588上的部署。我们从SMOKE的。

LXY_LOVE36的博客 438

【Pix4d精品教程】pix4d mapper相机未校准后手动添加连接点完美案例图文教程

如图所示,红色的照片为未校准的图片,软件无法自动获取连接点,有关相机未校准的原因及解决办法,可以参考《pix4d未校准相机:287 out of 402 images calibrated (71%), all images enabled, 6 block,问题分析及解决方案汇总》,本文以案例的形式,详细讲解pix4d中手动添加连接点的方法及操作步骤。 文章目录1. 手动添加连接点2. 重新优化3. 生成质量报告,检查精度 1. 手动添加连接点 在【空三射线】模式下查看校准失败的图片,记下照片的名称。.

智慧空间实验室 2万+

当心T-SQL中COLLATE的陷阱

在SQLServer中用户可以在Server,数据库,表字段(列)和表达式级别定义字符集的类型。如果下一级没有定义字符集类型,则SQL Server会默认为上一级字符集类型。 举例如下:  declare  @Users table (  UserName nvarchar(255) collate SQL_Latin

GRANDTREE的专栏 1944

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

T-SQL重建所有数据库的所有表的索引

DECLARE @Database VARCHAR(255)DECLARE @Sqlcmd VARCHAR(1000)DECLARE @Test BITSET @Test = 1DECLARE DatabaseCursor CURSOR FORWARD_ONLY READ_ONLY FORSELECT name FROM master.dbo.sysdatabases WHER

GRANDTREE的专栏 1667

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

使用Cross Apply和Outer Apply关联表值函数中的字段

T-SQL中Cross Apply和Outer Apply关联表值函数的用法

GRANDTREE的专栏 1650

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

使用powershell查看性能计数器

http://technet.microsoft.com/en-us/library/dd367892.aspx

GRANDTREE的专栏 1575

在T-SQL中正确使用字符常量以取得最佳性能

                            先看例子:use    tempdb; -- Numbers 方便插入数据   CREATE  TABLE dbo.Numbers(

GRANDTREE的专栏 1538

240个国外SQL Server高手的博客集萃

Aaron BertrandAdam MachanicAll Things SQL ServerAllen Kinsel - SQL DBAAllen WhiteAmit Bansal writes...Andrew Fryers BlogAndrew KellyAndy LeonardAnything and Everything ITArcane CodeArnie Rowland: Ram

GRANDTREE的专栏 1450

慎用SQL Server ManagementStudio 表设计器的22个理由

详见: https://connect.microsoft.com/SQLServer/SearchResults.aspx?KeywordSearchIn=2&SearchQuery=%22table%2bdesigner%22&FeedbackType=1&Status=1&Scope=0&SortOrder=15&TabView=0 

GRANDTREE的专栏 1329

推荐一个免费的在线SQL Server教学网站

 http://www.sqlservercentral.com/articles/video   

GRANDTREE的专栏 1284

有趣而恼人的COALESCE函数

使用COALESCE函数时一定要注意其中各项数据的数据类型,尽量避免SQL Server进行隐式转换,这样才能避免意想不到的输出结果。

GRANDTREE的专栏 1194

设置ODBC的自定义类CSetODBC

何志丹一,功能描述用于配置数据源用户名及密码.1,可以得到连接串,此串可用于CMyRecordset(派生于CRecordset)的GetDefaultConnect(),也可以用干CDataBase类OpenEx.2,如果用户配置正确,只需要配置一次,相关信息记录在文件.3,可以指定存储信息的文件名.因为有可能几个程序共用一个数据源.4,用户可以重新配置数据5,可以得到当前数据的类型.6

闻缺陷则喜何志丹 3126
上一篇: 《软件随想录》一书的目录及感想
下一篇: 优化SQL语句的9大诀窍(Tips to optimize your SQL statements)
武哥博文
博客等级 码龄25年 89粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值