根据父级获所有子分类(CTE递归)的存储过程
2011-12-16 09:45
519 查看
自己做项目写的一个存储过程,通过父类ID,查询无限分类下所有子孙分类
使用SQL2005以上才有的CTE,所以数据库版本必须是2005以上
使用SQL2005以上才有的CTE,所以数据库版本必须是2005以上
USE [FetionCore] GO /****** 对象: StoredProcedure [dbo].[ParentIdCTE] 脚本日期: 12/16/2011 09:44:08 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: abaal -- Create date: 20111214 -- Description: 根据父级获所有子分类(CTE递归) -- ============================================= CREATE PROCEDURE [dbo].[ParentIdCTE] (@ParentId int) AS BEGIN SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; WITH temp (Id, Name, parentID, Level) AS( SELECT [P].[Id],[P].[Name],[P].[ParentId], 0 AS Level FROM [dbo].[PortraitType] AS P WHERE [P].[ParentId] = @ParentId --要查询的结点 id -- 上面这个查询是初始化用的, 所以只需要查询最顶一层的结点 UNION ALL -- 得到id的子结点 SELECT [P].[Id],[P].[Name],[P].[ParentId], Level + 1 FROM [dbo].[PortraitType] P JOIN temp AS C ON [P].[ParentId] = C.Id -- 上面这个查询才是用来递归的, 它与CTE上一次的结果JOIN,得到上一次结果的子层结点 ) SELECT Id, Name, parentID, Level FROM temp END set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'根据父级获所有子分类(CTE递归)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'PROCEDURE',@level1name=N'ParentIdCTE'
相关文章推荐
- 无限极分类mysql存储过程编写实现调用时给定一个id,返回其所有父级与子级并排序
- 根据分类表实现的分页存储过程.sql
- 利用CTE递归在存储过程中实现真分页
- 存储过程利用递归查找出树节点以及所有子节点
- 1.读取excel文件,将输入存储到数据库中(JXL) 2.完成商品的检索相关功能 1.根据分类,显示分类下所有的商品信息,按照库存量从低到高排序(提供补货依据) 2.模糊搜索,根据商品信息(名
- SQL 根据分类表实现的分页存储过程
- MSSQL 下递归CTE的应用通过父级获取所有对应的子级节点(一)
- P.NET无限级分类的非递归实现(存储过程版
- MSSQL 递归CTE的应用通过子级获取所有对应的父级及其本身(二)
- SQLServer获得所有用户存储过程、根据存储过程名称获得内容、获得数据库对象创建脚本
- 根据存储过程包含某个关键字,查找相关所有存储过程信息及根据多个主键删除重复列
- 使用mysql存储过程递归tree(如一个上级下面的所有下级的所有下级。。。。)
- 存储过程递归获取所有的子类
- SQL server 2005 查看所有存储过程的内容
- 【SQL语句】 - 在所有存储过程中查找关键字,关键字不区分大小写 [sp_findproc]
- 删除无限极分类的sql存储过程!
- 刷新SQL SERVER所有视图、函数、存储过程
- 利用SQL语句查找某数据库中所有存储过程包含的内容(转)
- mysql sql 根据父级id查询书所有的子孙级数据,或根据子级id查询对应的父级
- mysql读取树形结构所有子节点 mysql递归查询 详解 存储过程详解 查询所有子节点详解