CTE的使用方法和注意事项
来源:互联网 发布:svnchina mac 编辑:程序博客网 时间:2024/05/02 02:30
我先简单介绍一下CTE(Common Table Expression)是什么 ,然后简要介绍下用法和注意事项
什么是CTE:Common Table Expression:是Sql2005推出的语法,类似内置临时表,创建后自动消亡,在cte中可以进行递归查询等操作
cte可以看作临时表,但是它的生命周期仅存在于访问每一次的TSQL批处理语法中,而一般临时对象的生命周期与连接同在
一、生命周期
注意CTE和临时表有个重要的区别,就是生存周期,那么CTE的生存周期到底有多久呢,我们看下面的语句
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不是一个这个批处理的第一条语句,那么前一条语句必须要以冒号“;”结尾,如下
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 语句,如下
with CTE_Temp AS(
Select Top(30) * From Topics
)
declare @a int
set @a=5
- CTE的使用方法和注意事项
- cvFloodFill的使用方法和注意事项。
- TreeSet的使用方法和注意事项
- BufferedReader的使用方法和注意事项
- cookie的使用方法和注意事项
- C++ typename 关键字的使用方法和注意事项
- 软件开发SVN的使用方法和注意事项
- onPause()和onStop()的使用方法及注意事项
- BufferedWriter的使用方法分和注意事项
- 标准光源箱的使用方法和注意事项
- break 和 continue 的使用方法及注意事项
- QThread 的使用方法 注意事项
- C++中typename关键字的使用方法和注意事项
- C++中typename关键字的使用方法和注意事项
- C++中typename关键字的使用方法和注意事项
- C++中typename关键字的使用方法和注意事项
- C++中typename关键字的使用方法和注意事项
- C++中typename关键字的使用方法和注意事项
- 完全用Linux工作,摈弃Windows
- 裙
- CMM-软件能力成熟度模型
- 手动解决ravmon.exe病毒
- 第三代google排名搜索引擎技术与P2P
- CTE的使用方法和注意事项
- 手动查杀oduxyym.exe和veckdld.exe
- asp.net 中如何加入页面的背景音乐
- Use Try/Catch in ActionScript
- #ifndef的主要作用是什么
- 微软发布XNA游戏专业级编程模版——极品飞车!
- 关于swing线程的例子
- 使用Microsoft Live Writer离线写blog
- 使用ASP.NET跟踪Web应用程序