`
yangyou230
  • 浏览: 1649304 次
文章分类
社区版块
存档分类

CTE的使用方法和注意事项

 
阅读更多

我先简单介绍一下CTE(Common Table Expression)是什么,然后简要介绍下用法和注意事项

什么是CTE:Common Table Expression:是Sql2005推出的语法,类似内置临时表,创建后自动消亡,在cte中可以进行递归查询等操作

cte可以看作临时表,但是它的生命周期仅存在于访问每一次的TSQL批处理语法中,而一般临时对象的生命周期与连接同在

一、生命周期

注意CTE和临时表有个重要的区别,就是生存周期,那么CTE的生存周期到底有多久呢,我们看下面的语句

--从帖子表中选出前30条放入一个叫CTE_Temp的临时表
withCTE_TempAS(
SelectTop(30)*FromTopics
)

--从CTE_temp中查出所有记录(第一次),没有问题,返回30条记录
select*fromCTE_Temp

--从CTE_Temp中查询(第二次),报错,提示cte_temp对象不存在
select*fromCTE_Temp

紧跟在with语句后面的第一条语句是有效果的,执行第二条前对象就消亡了,也就是说cte的存在周期是with语句的下一条语句,所以,cte不能替代临时表,但是适用于那种只用一次的临时表的场合,在这种情况下,使用cte不会造成日志文件的增大,也不需要手工销毁临时表

二、使用冒号分割

使用cte还有一个地方需要注意,如果在存储过程或者语句中,cte不是一个这个批处理的第一条语句,那么前一条语句必须要以冒号“;”结尾,如下

declare@aint
set@a=5
--从帖子表中选出前30条放入一个叫CTE_Temp的临时表
withCTE_TempAS(
SelectTop(30)*FromTopics
)

这时执行报错:Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon.

如果你在set @a=5后面加一个;那么就可以顺利执行了,

三、使用限制

with语句下一定要有语句,并且一定要是select,update,delete,insert语句,如果没有语句会报:Incorrect syntax near ')'.但是如果你的with语句下跟了一个比如set 语句,如下

--从帖子表中选出前30条放入一个叫CTE_Temp的临时表
withCTE_TempAS(
SelectTop(30)*FromTopics
)
declare@aint
set@a=5
会报告Incorrect syntax near the keyword 'declare'.
分享到:
评论

相关推荐

    H3CTE排错报告与注意事项【视频讲解】

    很好的实验报告思路,内含报告模板,常见故障点,考试流程及注意事项

    mysql8 公用表表达式CTE的使用方法实例分析

    主要介绍了mysql8 公用表表达式CTE的使用方法,结合实例形式分析了mysql8 公用表表达式CTE的基本功能、原理使用方法及相关操作注意事项,需要的朋友可以参考下

    Sql学习第三天——SQL 关于CTE(公用表达式)的递归查询使用

    公用表表达式(CTE)具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE接下来详细介绍下:CTE 的基本语法结构,在使用CTE时注意事项以及实例操作

    SQL Server 2008高级程序设计 5/6

     3.7 通用表表达式(CTE)  3.8 递归查询  3.9 合并  3.10 利用外部调用完成复杂操作  3.11 性能考虑  3.12 小结 第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的...

    SQL Server 2008高级程序设计 4/6

     3.7 通用表表达式(CTE)  3.8 递归查询  3.9 合并  3.10 利用外部调用完成复杂操作  3.11 性能考虑  3.12 小结 第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的...

    SQL Server 2008高级程序设计 6/6

     3.7 通用表表达式(CTE)  3.8 递归查询  3.9 合并  3.10 利用外部调用完成复杂操作  3.11 性能考虑  3.12 小结 第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的...

    SQL Server 2008高级程序设计 1/6

     3.7 通用表表达式(CTE)  3.8 递归查询  3.9 合并  3.10 利用外部调用完成复杂操作  3.11 性能考虑  3.12 小结 第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的...

    SQL Server 2008高级程序设计 2/6

     3.7 通用表表达式(CTE)  3.8 递归查询  3.9 合并  3.10 利用外部调用完成复杂操作  3.11 性能考虑  3.12 小结 第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的...

    SQL Server 2008高级程序设计 3/6

     3.7 通用表表达式(CTE)  3.8 递归查询  3.9 合并  3.10 利用外部调用完成复杂操作  3.11 性能考虑  3.12 小结 第4章 XML集成  4.1 XML数据类型  4.2 提取XML格式的关系数据  4.3 有关XML索引的...

    leetcode每日一题在哪-SQL-Note:LeetCodeSQL注释

    练习注意事项 力扣 SQL # 标题 解决方案 困难 标签 0175 简单的 0176 简单的 0177 / 中等的 窗函数,设置 0178 中等的 0180 / 中等的 连接,窗口函数 0181 简单的 0182 / 简单的 通过...分组 0183 简单的 0184 中等...

    Teampp:编译器类最终项目

    团队编译器项目Languaje Team ++#1月“ 5-11”周: 1带有标记的词典的定义2语法定义及其图表3创建github仓库第1周“ 12月16日”: 1以图表形式回顾以上内容2语法复习3添加语法4使语法适合吉森5语义注意事项表1对图...

Global site tag (gtag.js) - Google Analytics