`

SQL Server 2005中的CTE

阅读更多
SQL Server 2005中有一种新的语法叫做通用表表达式,CTE(Common Table Expression)。

这种语法的好处就是可以创建出一张临时的表,这张表可以在定义中使用自引用,使得我们处理父-子关系变得前所未有的方便,T-SQL中也有这个功能啦。

----------------------------------------------------------------------

USE AdventureWorks
IF EXISTS(SELECT [name] FROM sys.tables WHERE [name] = 'P_C')
DROP TABLE P_C
CREATE TABLE P_C (ID int, ParentID int)

INSERT INTO P_C VALUES (0,0)
INSERT INTO P_C VALUES (1,0)
INSERT INTO P_C VALUES (2,0)
INSERT INTO P_C VALUES (3,1)
INSERT INTO P_C VALUES (4,2)
INSERT INTO P_C VALUES (5,3)
INSERT INTO P_C VALUES (6,0)
INSERT INTO P_C VALUES (7,4)
INSERT INTO P_C VALUES (8,5)
INSERT INTO P_C VALUES (9,8)
INSERT INTO P_C VALUES (10,4)
INSERT INTO P_C VALUES (11,10)
INSERT INTO P_C VALUES (12,2)
INSERT INTO P_C VALUES (13,3)
INSERT INTO P_C VALUES (14,6)
INSERT INTO P_C VALUES (15,14)
INSERT INTO P_C VALUES (16,11)
INSERT INTO P_C VALUES (17,14)
INSERT INTO P_C VALUES (18,15)
INSERT INTO P_C VALUES (19,18)
INSERT INTO P_C VALUES (20,7)
INSERT INTO P_C VALUES (21,9)
INSERT INTO P_C VALUES (22,9)
INSERT INTO P_C VALUES (23,12)
INSERT INTO P_C VALUES (24,13)
INSERT INTO P_C VALUES (25,12)
INSERT INTO P_C VALUES (26,15)
GO

--CTE的实现代码
WITH PCV(P, C) AS
(
    SELECT P.ID, P.ParentID
    FROM P_C AS P WHERE P.ParentID = 5
    UNION ALL
    SELECT C.ID, C.ParentID
    FROM P_C AS C INNER JOIN PCV ON C.ParentID = PCV.P
)
SELECT * FROM PCV
GO

--利用存储过程实现
CREATE PROCEDURE dbo.usp_GetHierarchy
@ParentID int
AS
WITH PCV(P, C) AS
(
    SELECT P.ID, P.ParentID
    FROM P_C AS P WHERE P.ParentID = @ParentID
    UNION ALL
    SELECT C.ID, C.ParentID
    FROM P_C AS C INNER JOIN PCV ON C.ParentID = PCV.P
)
SELECT * FROM PCV
GO

EXEC dbo.usp_GetHierarchy 3
EXEC dbo.usp_GetHierarchy 5
EXEC dbo.usp_GetHierarchy 8
EXEC dbo.usp_GetHierarchy 9

--清理数据库
DROP PROCEDURE dbo.usp_GetHierarchy
DROP TABLE P_C


分享到:
评论

相关推荐

    sqlserver 2005 使用CTE 实现递归

    ### SQL Server 2005 中使用 CTE 实现递归 #### 一、CTE 递归原理 在 SQL Server 2005 中,使用公共表表达式(Common Table Expression, CTE)实现递归是一种高效且直观的方式。递归 CTE 通常由两部分构成:定位...

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

    SQL Server 2005 中使用公用表表达式(CTE)简化嵌套 SQL SQL Server 2005 中的公用表表达式(CTE)是一种强大的工具,可以简化嵌套的 SQL 语句,提高代码的可维护性和性能。本文将介绍 CTE 的基本概念、语法和使用...

    SQL2005查询工具 SQLServer2005_SSMSEE

    描述中提到的"简单安装SQL软件可以下载使用",意味着SQL Server 2005 SSMSEE的安装过程相对简单,用户只需下载`SQLServer2005_SSMSEE.msi`这个安装文件,按照向导指示即可完成安装。安装后,用户无需复杂的配置就能...

    sql server 2005脚本

    在SQL Server 2005中,存储过程可以更灵活地处理输入参数,并支持输出参数。触发器则用于在数据修改(INSERT、UPDATE、DELETE)时自动执行特定操作。 3. **视图**: 视图是虚拟表,由一个或多个表的SELECT语句组成...

    SQL Server 2005 Beta 2 Transact-SQL 增强功能

    SQL Server 2005 Beta 2带来了对Transact-SQL的显著增强,这些改进主要集中在提升查询表达能力、数据完整性(DRI)支持、性能优化以及错误处理方面。以下是对这些增强功能的详细说明: 1. **排序函数**: SQL ...

    SQL SERVER的CTE用法

    在SQL Server中,公共表表达式(Common Table Expression,简称CTE)是一种非常有用的查询构造,它可以临时定义一个结果集,然后在这个结果集的基础上进行进一步的查询操作。CTE不仅可读性强,而且有助于简化复杂的...

    SQL SERVER 2005 简介

    SQL SERVER 2005 简介 SQL Server 2005 是一个全新的数据库平台系统,包含多种软件元件与服务,来满足企业对于日渐复杂的数据系统的需求。该版本的T-SQL结构化查询语言大幅扩增了新的查询指令,例如XQuery、取得...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL Server 2005中高级T-SQL查询、查询优化及编程相关的知识。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。它们...

    [sql server]SQL Server2005杂谈(2):公用表表达式(CTE)的递归调用.doc

    本文主要介绍了 SQL Server 2005 中公用表表达式(CTE)的递归调用,用于解决树型结构数据的查询问题。CTE 是 SQL Server 2005 中的一种新的查询方式,它可以简化复杂的查询过程。 在本文中,我们使用一个树型结构...

    Pro SQL Server 2005 (2006)

    2. **Transact-SQL (T-SQL)增强**:SQL Server 2005扩展了T-SQL语言,增加了新的函数、操作符和语句,如窗口函数、公用表表达式(CTE)和嵌套触发器,提高了开发人员编写复杂查询的灵活性。 3. **Integration ...

    SQL Server2005分页查询

    在SQL Server 2005中,分页查询是一个常见的需求,特别是在处理大量数据时,为了提高用户体验,通常需要一次性加载一定数量的数据,而不是一次性显示所有数据。以下将详细讲解SQL Server 2005中分页查询的常用方法。...

    sql server2005教程

    在SQL Server 2005中,数据库的创建、维护和备份都有了新的工具支持。例如,使用SQL Server Management Studio (SSMS) 可以方便地进行数据库的设计、查询、备份和恢复。此外,SQL Server 2005还提供了对数据库镜像的...

    SQL Server CTE 递归查询全解1

    SQL Server中的递归查询主要通过CTE(公共表表达式)来实现,它是一种非常强大的工具,特别适用于处理层次结构数据。CTE是T-SQL脚本中的临时结果集,可以用于复杂的查询,尤其是需要递归操作的情况。本文将深入探讨...

    sqlserver驱动2012版

    标题中的“sqlserver驱动2012版”指的是SQL Server Native Client 2012,这是微软为SQL Server设计的一款数据库访问接口。SQL Server Native Client(简称SQLNCLI)是用于与SQL Server交互的一种客户端库,它包含了...

    SQL Server2005 安装(通用版)

    在本文中,我们将详细探讨SQL Server 2005的安装过程及其重要特性。 一、SQL Server 2005安装步骤 1. **准备工作**:确保你的计算机满足SQL Server 2005的系统需求,包括操作系统版本、内存、硬盘空间以及.NET ...

    SQLserver CTE With

    SQLserver CTE With 使用with产出临时表,在根据临时表二次查询

    SQL SERVER 2005 新增的几个小功能

    ### SQL Server 2005新增的小功能详解 #### 一、分页查询数据 在SQL Server 2005之前,实现分页查询通常较为复杂且效率不高。随着SQL Server 2005的发布,引入了一种更为简便的方式来实现分页查询,即通过`ROW_...

    SQL server Native Client 10.0

    这个组件在64位操作系统中尤其重要,因为它提供了对64位数据源的支持,确保了与SQL Server 2008 R2等64位数据库系统的高效通信。 1. **ODBC接口**: ODBC是SQL Server Native Client 10.0中的关键部分,它是一个...

    SqlServer2005课件

    Transact-SQL在Sql Server 2005中得到进一步扩展,支持窗口函数、公用表表达式(CTE)、并行查询等高级特性。这些功能让复杂的查询和分析变得更加便捷。 五、索引与查询优化 索引是提升查询速度的关键。Sql Server ...

    SQL Server 2005 T-SQL增强

    在SQL Server 2005中,T-SQL的增强主要体现在以下几个方面: 1. **窗口函数**:SQL Server 2005引入了窗口函数,如RANK(), DENSE_RANK(), ROW_NUMBER(),以及LEAD(), LAG()等,这些函数允许开发者在数据集上进行行...

Global site tag (gtag.js) - Google Analytics