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

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

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

一、生命周期

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

-- 从帖子表中选出前30条放入一个叫CTE_Temp的临时表
with  CTE_Temp  AS (
Select   Top ( 30 )  *   From  Topics
)

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

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

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

二、使用冒号分割

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

declare   @a   int
set   @a = 5
-- 从帖子表中选出前30条放入一个叫CTE_Temp的临时表
with  CTE_Temp  AS (
Select   Top ( 30 )  *   From  Topics
)

这时执行报错: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的临时表
with  CTE_Temp  AS (
Select   Top ( 30 )  *   From  Topics
)
declare   @a   int
set    @a = 5

会报告Incorrect syntax near the keyword 'declare'.

CTE的使用方法和注意事项相关推荐

  1. Dubbo+zookeeper使用方法以及注意事项

    Dubbo+zookeeper使用方法以及注意事项 最近在一个项目中想做一个数据库查询的服务,目的是将数据库查询这块从程序中脱离出来,形成一个公共的服务平台,大家都可以调用,经过考虑决定选用Dubbo ...

  2. 【PC工具】200412更新百度网盘下载工具——最终最简单百度网盘下载方法及注意事项...

    今天有朋友在群里问会员账号,上次好像说过,这种公用的会员账号基本下载量都超了,同样也限速,所以这种账号一般都用来找资源. 百度网盘这个题材也来回来去发过好几个工具了,太麻烦不说,老这么道高一尺魔高一丈 ...

  3. 【PC工具】200324更新百度网盘下载工具——最新百度网盘下载工具使用方法及注意事项...

    今天(200324)更新一个大牛的个人项目pdown,大家可以收藏一下备用(为啥是备用呢,细心的小伙伴应该发现我把标题中的高速两个字去掉了). 先发项目地址:没错还是那个神奇的网站(大神奇人聚集的地方 ...

  4. 【PC工具】更新百度网盘高速下载工具——亿寻使用方法及注意事项

    之前分享的工具和方法大部分都不好用了,我也就不保留了,有需要的朋友可以翻看之前的历史文章. 今天分享一个目前比较主流的下载工具"亿寻",可能很多朋友都用过了,这里我简单说一下使用方 ...

  5. mysql cte 语法,mysql8 公用表表达式CTE的使用方法实例分析

    本文实例讲述了mysql8 公用表表达式cte的使用方法.分享给大家供大家参考,具体如下: 公用表表达式cte就是命名的临时结果集,作用范围是当前语句. 说白点你可以理解成一个可以复用的子查询,当然跟 ...

  6. php获取表单$_files,PHP中$_FILES的使用方法及注意事项说明

    $_FILES:经由 HTTP POST 文件上传而提交至脚本的变量,类似于旧数组$HTTP_POST_FILES 数组(依然有效,但反对使用)详细信息可参阅 POST方法上传 $_FILES数组内容 ...

  7. 佳能g3800故障灯说明书_汽车仪表灯的使用方法以及注意事项

    能够准确地识别仪表盘上的数据是每个驾驶员的必要能力,但是如今,汽车技术日新月异,大量先进技术已应用于我们的爱车上.汽车仪表盘上的指示灯和中控台上的指示灯按钮变得越来越繁杂,准确识别这些抽象按钮已不再是 ...

  8. 电脑安全注意事项_松下洗衣机维修方法及注意事项

    阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 注:本文转载自网络,不代表 ...

  9. go面向对象编程:结构体struct详解、结构体实例的创建方式、结构体之间的转换(type取别名的使用)、方法的注意事项及与函数的区别

    入门示例 package main import "fmt" //定义老师结构体,将老师中的各个属性 统一放入结构体中管理: type Teacher struct{//变量名字大 ...

最新文章

  1. AribaWeb 框架学习系列之一
  2. kaka 1.0.0 重磅发布,服务于后端的事件领域模型框架。
  3. HDOJ_2010_大二写_水仙花数
  4. 小麦助教:通过阿里云原生中间件产品组合,加速微服务架构落地
  5. js 判断数据是否为空
  6. IDEA基本使用及配置(2)
  7. WPF TextBox/TextBlock 文本超出显示时,文本靠右显示
  8. [转载]从零开始学习OpenGL ES之五 – 材质
  9. /usr/bin/xsltproc: not found
  10. 深度解析国内主流离线编程软件
  11. html表单制作选择,html表单(html表单制作及实例)
  12. 送给计算机老师平安夜贺卡,平安夜小朋友送老师的贺卡寄语
  13. vios 虚拟光驱 安装vioc
  14. lenovo启动热键_联想启动热键
  15. 初始化一个java空数组_Java 数组的两种初始化方式
  16. surreal number应对不平等博弈
  17. math.h中常用的函数(C语言)
  18. tr td th是什么的缩写
  19. BIGEMAP怎么下载地图
  20. 深度学习教你重建赵丽颖的三维人脸

热门文章

  1. 苹果手机用计算机打不开怎么办,无法打开电脑iTunes怎么办 打不开电脑iTunes解决方法...
  2. python 运行r语言_如何在R中运行Python
  3. 微信小游戏开发,需要用到哪些接口?
  4. Python实现暗通道去雾算法——清晰还原雾天景色
  5. linux下运行jar包命令
  6. 火车头V9开心版提示Exception Processing Message 0xc0000005 Parameters解决方法
  7. java数据访问层实例_java实际项目先写哪一层?java三层架构是什么?
  8. android卸载应用权限管理,android 权限管理和签名 实现静默卸载
  9. android 手电筒 开源,1.【小萌伴Android】思量再三,终于鼓起勇气开源~
  10. Pose Animator 让矢量图捕捉你的动作,然后动起来。(翻译学习)