- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CTE应用--递归查询.doc
SQL Server教程:SQL2005/2008中的CTE应用--递归查询2011年11月24日? 来源:51Test.NET???培训课程? 发布课程? 加入收藏-【51Test.NET-SQL Server教程:SQL2005/2008中的CTE应用--递归查询】:微软从SQl2005起引入了CTE(Common Table Expression)以强化T-SQL。这是一个类似于非持久视图的好东东。
按照MSDN介绍
1、公用表表达式 (CTE) 可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句的执行范围内定义的临时结果集 。CTE 与派生表类似,具体表现在不存储为对象,并且只在查询期间有效 。与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次 。
CTE 可用于:
创建递归查询。有关详细信息,请参阅使用公用表表达式的递归查询 。在不需要常规使用视图时替换视图,也就是说,不必将定义存储在元数据中。启用按从标量嵌套 select 语句派生的列进行分组,或者按不确定性函数或有外部访问的函数进行分组。在同一语句中多次引用生成的表。使用 CTE 可以获得提高可读性和轻松维护复杂查询的优点。查询可以分为单独块、简单块、逻辑生成块。之后,这些简单块可用于生成更复杂的临时 CTE,直到生成最终结果集。可以在用户定义的例程(如函数、存储过程、触发器或视图)中定义 CTE。
2、公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE 。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。当某个查询引用递归 CTE 时,它即被称为递归查询 。递归查询通常用于返回分层数据,例如:显示某个组织图中的雇员或物料清单方案(其中父级产品有一个或多个组件,而那些组件可能还有子组件,或者是其他父级产品的组件)中的数据。
递归 CTE 可以极大地简化在 SELECT、INSERT、UPDATE、DELETE 或 CREATE VIEW 语句中运行递归查询所需的代码。在 SQL Server 的早期版本中,递归查询通常需要使用临时表、游标和逻辑来控制递归步骤流。有关公用表表达式的详细信息,请参阅使用公用表表达式 。
?这里举例说明如下:
?为了描述方便,邀月特地列举了一个常见的自关联Table
表结构如下:CREATE TABLE [dbo].[CategorySelf](??? [PKID] [int] IDENTITY(1,1) NOT NULL,??? [C_Name] [nvarchar](50) NOT NULL,??? [C_Level] [int] NOT NULL,??? [C_Code] [nvarchar](255) NULL,??? [C_Parent] [int] NOT NULL,牋?[InsertTime] [datetime] NOT NULL,牋?[InsertUser] [nvarchar](50) NULL,牋?[UpdateTime] [datetime] NOT NULL,牋?[UpdateUser] [nvarchar](50) NULL,牋?[SortLevel] [int] NOT NULL,牋?[CurrState] [smallint] NOT NULL,牋?[F1] [int] NOT NUL L,牋?[F2] [nvarchar](255) NULL燙ONSTRAINT [PK_OBJECTCATEGORYSELF] PRIMARY KEY CLUSTERED(牋?[PKID] ASC)WITH (PAD_INDEX?= OFF, STATISTICS_NORECOMPUTE?= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS?= ON, ALLOW_PAGE_LOCKS?= ON) ON [PRIMARY]) ON [PRI MARY]GO
再插入一些测试数据
INSERT INTO [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()),CrackUser,1
文档评论(0)