`
lovnet
  • 浏览: 6879442 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

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排错报告与注意事项【视频讲解】

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

    [sql server] SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL

    四、CTE 的使用注意事项 在使用 CTE 时,需要注意以下几点: 1. CTE 后面必须直接跟使用 CTE 的 SQL 语句(如 SELECT、INSERT、UPDATE 等),否则,CTE 将失效。 2. CTE 后面也可以跟其他的 CTE,但只能使用一个 ...

    Laravel开发-laravel-cte

    四、注意事项 1. 使用`DB::raw()`和原始SQL时,务必小心SQL注入。确保传入的参数都经过了适当的验证或转义。 2. 在处理大量数据时,CTE可能会影响性能,因此在设计查询时应尽量优化CTE的使用。 3. 需要熟悉SQL标准...

    DB2循环递归实例很有用的

    #### 四、递归查询注意事项 - **性能考虑**:递归查询可能会导致大量的数据读取,因此需要确保基础表的数据量不要过大,或者有足够的索引来支持快速查询。 - **递归深度限制**:DB2对递归深度有一定的限制,如果...

    数据库设计之递归树查询

    六、注意事项与优化 1. 避免无限循环:确保递归查询有一个明确的终止条件,否则可能导致无限循环。 2. 性能考虑:递归查询可能会消耗大量资源,特别是当树非常深或者数据量大时。考虑是否可以通过其他方式(如预计算...

    Oracle SQL语句分页问题

    - **注意事项**:确保在使用分页查询时考虑到性能问题,特别是在处理大量数据时,合理设置`@pagesize`值,并对查询结果进行适当缓存。 #### 五、总结 通过对Oracle SQL分页问题的探讨,我们可以看出,虽然Oracle...

    jdbc分页代码使用的是sql语句

    在数据库操作中,分页是一种常见的功能,用于在大量数据中进行有组织的...以上就是使用JDBC和SQL语句实现分页查询的基本步骤和注意事项。在处理大量数据时,分页不仅提高了用户体验,也是服务器资源管理的重要手段。

    学会带分页的存储过程的使用!

    六、优化与注意事项 1. 考虑到性能,应确保在ORDER BY后的字段上有索引。 2. 避免在存储过程中使用动态SQL,以防止SQL注入。 3. 考虑到数据量的变化,可能需要调整缓存策略。 4. 当分页参数为0或负数时,应进行错误...

    面试--DBA30问

    - **使用和维护**:合理设计索引结构,避免过度索引造成性能下降;定期检查索引碎片并进行整理。 #### 5. 视图与存储过程的区别;视图的优缺点。 - **视图与存储过程的区别**:视图是一种虚拟表,其内容是由一个...

    jsp导出excel并支持分sheet导出的方法.docx

    #### 注意事项 1. **性能考虑**:对于大数据量导出,需要考虑内存和性能问题。可以通过分批次导出或者使用流式写入的方式来减少内存占用。 2. **异常处理**:在实际开发中,需要充分考虑到各种可能发生的异常情况...

    mysql-5.6.30-winx64.zip

    下面将详细探讨MySQL 5.6.30的关键特性、安装与配置、使用方法以及其在Windows 64位环境下的注意事项。 一、关键特性 1. **性能提升**:MySQL 5.6引入了InnoDB存储引擎的性能优化,如InnoDB Buffer Pool实例化、更...

    IT技术资源分享

    - 考官会在考试开始前宣读考试规则及注意事项。 - 考试时间为上午8:45至11:45,下午13:30至16:30。 - 在14:30时考官会提醒考生准备撰写排错报告。 - **考试内容**: - **基础知识**:考生需要熟悉考试大纲中的...

    三个版本的mysql

    本文将深入探讨三个不同版本的MySQL——MySQL 5.5、MySQL 5.7和MySQL 8.0,以及它们在安装和使用上的注意事项。 首先,MySQL 5.5是较早的一个稳定版本,它引入了许多增强功能,例如InnoDB存储引擎的性能提升,支持...

    JDBC连接myaql数据库.rar

    **注意事项**: - 不同版本的MySQL连接器可能对特定的MySQL特性有不同的支持,升级前应测试兼容性。 - 使用PreparedStatement可以避免SQL注入攻击,提升代码安全性。 - 关闭资源时,通常使用try-with-resources语句...

    mysql8-0-19版本脚本自动安装

    “readme.txt”通常包含关于安装脚本的说明、使用指南、注意事项以及可能遇到的问题和解决方案。在安装前,应仔细阅读此文件,了解如何运行脚本及安装过程中的预期行为。 四、share 文件夹 “share”可能包含与安装...

    第七章 电子元器件可靠性设计及评价.pdf

    #### 四、器件选用特别注意事项 在选择电子元器件时,还需要注意以下几点: 1. **印制板的玻璃转化温度**:低于125°C时需要特别关注。 2. **印制板的PTH和PTV的面积比**:应大于3.0。 3. **器件不在优选目录中**...

    DB2 LUW to UDB400 v3

    - 在移植过程中,如果应用程序使用了特定于 DB2 LUW 的扩展器,可能需要调整这些自定义数据类型和操作,以确保它们在 UDB400 上也能正常工作。 - 需要审查当前使用的扩展器,并评估是否需要在 UDB400 中实现类似的...

    hibernate实现递归查询

    5. **注意事项** 递归查询可能导致无限循环,所以在设计递归查询时必须设置好终止条件,例如限制查询深度。同时,对于大规模数据,递归可能会消耗大量内存,因此需谨慎处理。 综上所述,通过合理设计实体关系,...

Global site tag (gtag.js) - Google Analytics