SQL Server 2005中的T-SQL有了一系列的扩展,本文介绍Common Table Expression(CTE)。
在编写复杂的T-SQL语句或存储过程时,经常需要在现有表的结构之上进行数据的重组,以获取最终的结果。常用的方式有:
- JOIN 用于查询时多表的链接。
- UNION 查询结果的合并
- 子查询 将一个查询的结果参与的另一个查询,支持IN, EXIST等用法。
- 临时表 有局部临时表和全局临时表两种。
此外,T-SQL中还有一些较复杂的用法:
- APPLY 用于函数返回的表结构,有CROSS APPLY和OUTER APPLY两种用法
- PIVOT和UNPIVOT 用于行列数据的转置
- CTE Common Table Expression 参见下文的介绍
CTE用于创建一个自定义的表结构,用法示例如下:
WITH Table(Column1, Column2, ...) AS
(
SELECT * from Table1
)
SELECT * FROM TABLE
非常简单的一个例子,这其实只是一条T-SQL命令。通过WITH ... AS (...),创建了一个自定义结构的数据表,其内容由AS之后的SELECT来构建。
不同于临时表,CTE并不占用tempdb空间,其生命期也仅位于当时的查询中。CTE据有临时表和子查询所不具备的一些特点,为T-SQL程序员提供了子查询,临时表之外的一个工具。