Sql Server2005对t-sql的增强之通用表表达式CTE

CTE是Common Table Expression的简写,翻译成中文就是通用表表达式,它可以在select,insert或者update中使用。

为了说明问题,我们先随便建张表,插入几条数据:

if object_id('t','U') is not null --用object_id函数判断表是否在数据库中存在很简洁

drop table t;
GO
create table t(c1 int,c2 decimal,c3 int);
GO
INSERT INTO t
SELECT c1 = 1,c2 = 5.0,c3=10
UNION
SELECT c1 = 2,c2 = 5.5,c3=10
UNION
SELECT c1 = 3,c2 = 5.0,c3=20
UNION
SELECT c1 = 4,c2 = 5.5,c3=20

--下面我们使用CTE写一个分页的sql语句

GO
WITH t_cn AS
(
select c1,c2,c3,rn = ROW_NUMBER() OVER(ORDER BY c1 DESC) FROM t WHERE 0 = 0 --可以在此处添加一些条件
)
SELECT c1,c2,c3 FROM t_cn WHERE rn between 2 and 3
SELECT totalCn = COUNT(*) FROM t WHERE 0 = 0

这就是一个最最简单的示例了,这样写出来的分页是不是很简洁?CTE还可以用在insert和update中用法大同小异,就不一一列举。

时间: 2024-09-11 06:12:07

Sql Server2005对t-sql的增强之通用表表达式CTE的相关文章

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

本文为原创,如需转载,请注明作者和出处,谢谢!    先看下面一个嵌套的查询语句: select * from person.StateProvince where CountryRegionCode in           (select CountryRegionCode from person.CountryRegion where Name like 'C%')     上面的查询语句使用了一个子查询.虽然这条SQL语句并不复杂,但如果嵌套的层次过多,会使SQL语句非常难以阅读和维护.

SQL Server2005杂谈(2):公用表表达式(CTE)的递归调用

本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL 先看如下一个数据表(t_tree):     上图显示了一个表中的数据,这个表有三个字段:id.node_name.parent_id.实际上,这个表中保存了一个树型结构,分三层:省.市.区.其中id表示当前省.市或区的id号.node_name表示名称.parent_id表示节点的父节点的id.     现在有一个需求,要查询出某个省下面的所有市和区(查询结

SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较

本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:SQL Server2005杂谈(2):公用表表达式(CTE)的递归调用     排名函数是SQL Server2005新加的功能.在SQL Server2005中有如下四个排名函数: 1. row_number 2. rank 3. dense_rank 4. ntile        下面分别介绍一下这四个排名函数的功能及用法.在介绍之前假设有一个t_table表,表结构与表中的数据如图1所示: 图1 其中field1字段的类型是int

SQL Server 2005中的T-SQL增强

server 丰富的数据类型 Richer Data Types 1.varchar(max).nvarchar(max)和varbinary(max)数据类型最多可以保存2GB的数据,可以取代text.ntext或image数据类型.CREATE TABLE myTable(    id INT,    content VARCHAR(MAX)) 2.XML数据类型XML数据类型允许用户在SQL Server数据库中保存XML片段或文档. 错误处理 Error Handling 1.新的异常处

故障-SQL server2005群集问题

问题描述 SQL server2005群集问题 SQL server2005群集问题 sql server 群集搭建好后,在节点一SQL server服务可以启动.节点一故障,移到节点二后SQL server服务启动失败.再移动组到节点一,服务可以启动.而且移到节点二后,共享磁盘S盘里的microsoft SQL server文件夹也没了...求解~~ 解决方案 [问题一]:? 执行drop database 'xxx';? 反馈结果:'无法对 数据库'xxx' 执行 删除,因为它正用于复制.'

[转载]利用SQL SERVER2005发送邮件

原文:http://sqlserver2005.itpub.net/post/22359/210413 早在sql server 2000中可以通过sql mail给指定的邮件地址发邮件.SQL SERVER 2005中我们仍外可以用sql server2000中的SQLMAIl功能 发送邮件,但SQL SERVER2005中又提供一个新数据库邮件功能也可以发送和接收邮件.这里以数据库邮件为例进行说明. 为了安全起见,微软将数据中的一些可能带来安全隐患的一些功能组件禁用掉了,数据库邮件和SQL

SQL Server2005数据库查询中使用CTE

通用表表达式(CTEs)是SQL Server 2005的一项新功能.它们类似于alias(如在SELECT T1.* FROM MyTable T1中),不过功能更为强大.本质上,CTE是一个临时结果集,它仅仅存在于它发生的语句中.您可以在SELECT.INSERT.DELETE.UPDATE或CTEATE VIEW语句中建立一个CTE.CTE类似于派生表,但拥有几项优点. CTE的优点 与派生表不同,CTE能够引用自己本身.如果您不必存储视图,您可以用一个CTE来代替它.在一个语句中,您还可

关于SQL Server 2000和SQL Server 2005分布式事务能否协同工作的测试

server|分布式 关于SQL Server 2000和SQL Server 2005分布式事务能否协同工作的测试 MS DTC Report 1.      MS DTC 背景 2.      MSDTC 测试目的 3.      MSDTC 测试环境 3.1            本次验证测试环境: 3.2            环境配置 3.3            验证MSDTC 3.4            创建验证用表 4.      Linked Server测试 5.     

SQL Server 2005和SQL Server 2000数据的相互导入

  1) SQL Server 2000数据导入SQL Server 2005 在SQL Server 2000中,把其数据进行备份,在数据库中点击右键,选择"所有任务"下的"备份数据库",弹出一个对话框,然后点击"添加"按钮,输入对应的数据库备份名称,就可以备份数据了.然后在SQL Server 2005中,在数据库中点击右键,点击"还原数据库",在弹出的对话框中,"常规"的选项卡中,"目标数据