cte应用--递归查询

cte应用--递归查询

ID:15952279

大小:34.50 KB

页数:6页

时间:2018-08-06

cte应用--递归查询_第1页
cte应用--递归查询_第2页
cte应用--递归查询_第3页
cte应用--递归查询_第4页
cte应用--递归查询_第5页
资源描述:

《cte应用--递归查询》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、SQLServer教程:SQL2005/2008中的CTE应用--递归查询2011年11月24日 来源:51Test.NET   培训课程 发布课程 加入收藏-【51Test.NET-SQLServer教程:SQL2005/2008中的CTE应用--递归查询】:微软从SQl2005起引入了CTE(CommonTableExpression)以强化T-SQL。这是一个类似于非持久视图的好东东。按照MSDN介绍1、公用表表达式(CTE)可以认为是在单个SELECT、INSERT、UPDATE、DELETE或CREATE

2、VIEW语句的执行范围内定义的临时结果集。CTE与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,CTE可自引用,还可在同一查询中引用多次。CTE可用于:创建递归查询。有关详细信息,请参阅使用公用表表达式的递归查询。在不需要常规使用视图时替换视图,也就是说,不必将定义存储在元数据中。启用按从标量嵌套select语句派生的列进行分组,或者按不确定性函数或有外部访问的函数进行分组。在同一语句中多次引用生成的表。使用CTE可以获得提高可读性和轻松维护复杂查询的优点。查询可以分为单独块、简

3、单块、逻辑生成块。之后,这些简单块可用于生成更复杂的临时CTE,直到生成最终结果集。可以在用户定义的例程(如函数、存储过程、触发器或视图)中定义CTE。2、公用表表达式(CTE)具有一个重要的优点,那就是能够引用其自身,从而创建递归CTE。递归CTE是一个重复执行初始CTE以返回数据子集直到获取完整结果集的公用表表达式。当某个查询引用递归CTE时,它即被称为递归查询。递归查询通常用于返回分层数据,例如:显示某个组织图中的雇员或物料清单方案(其中父级产品有一个或多个组件,而那些组件可能还有子组件,或者是其他父级产品的

4、组件)中的数据。递归CTE可以极大地简化在SELECT、INSERT、UPDATE、DELETE或CREATEVIEW语句中运行递归查询所需的代码。在SQLServer的早期版本中,递归查询通常需要使用临时表、游标和逻辑来控制递归步骤流。有关公用表表达式的详细信息,请参阅使用公用表表达式。 这里举例说明如下: 为了描述方便,邀月特地列举了一个常见的自关联Table表结构如下:CREATETABLE[dbo].[CategorySelf](   [PKID][int]IDENTITY(1,1)NOTNULL,   [

5、C_Name][nvarchar](50)NOTNULL,   [C_Level][int]NOTNULL,   [C_Code][nvarchar](255)NULL,   [C_Parent][int]NOTNULL,   [InsertTime][datetime]NOTNULL,   [InsertUser][nvarchar](50)NULL,   [UpdateTime][datetime]NOTNULL,   [UpdateUser][nvarchar](50)NULL,   [SortLevel][

6、int]NOTNULL,   [CurrState][smallint]NOTNULL,   [F1][int]NOTNULL,   [F2][nvarchar](255)NULL CONSTRAINT[PK_OBJECTCATEGORYSELF]PRIMARYKEYCLUSTERED(   [PKID]ASC)WITH(PAD_INDEX =OFF,STATISTICS_NORECOMPUTE =OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS =ON,ALLOW_PAGE_LOCKS

7、 =ON)ON[PRIMARY])ON[PRIMARY]GO再插入一些测试数据INSERTINTO[CategorySelf]([C_Name],[C_Level],[C_Code],[C_Parent],[InsertTime],[InsertUser],[UpdateTime] ,[UpdateUser] ,[SortLevel] ,[CurrState] ,[F1] ,[F2])select'分类1',1,'0',0,GETDATE(),'testUser',DATEADD(dd,1,getdate()),'

8、CrackUser',13,0,1,'邀月备注'unionallselect'分类2',1,'0',0,GETDATE(),'testUser',DATEADD(dd,78,getdate()),'CrackUser',12,0,1,'邀月备注'unionallselect'分类3',1,'0',0,GETDATE(),'testUser',DATEADD(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。