--Parent-Child reationship
--涂聚文 2014-08-25
--得位置的子節點函數表(包含本身)
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetBookPlaceChildrenId]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[GetBookPlaceChildrenId]
GO
Create Function GetBookPlaceChildrenId
(
@ID int
)
Returns @Tree Table (BookPlaceID Int,BookPlaceParent Int, BookPlaceName NVarchar(180))
As
Begin
Insert @Tree Select BookPlaceID,BookPlaceParent, BookPlaceName From BookPlaceList Where BookPlaceID = @ID
While @@Rowcount > 0
Insert @Tree Select A.BookPlaceID, A.BookPlaceParent, A.BookPlaceName From BookPlaceList A Inner Join @Tree B On A.BookPlaceParent = B.BookPlaceID And A.BookPlaceID Not In (Select BookPlaceID From @Tree)---
Return
End
GO select * from dbo.GetBookPlaceChildrenId (2) ---得到位置子节点列表ID地址函數(包含本身)
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetBookPlaceGroupId]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[GetBookPlaceGroupId]
GO
Create Function [dbo].[GetBookPlaceGroupId]
(
@BookPlaceID int
)
RETURNS NVARCHAR(200)
AS
BEGIN
declare @allstring nvarchar(200),@top nvarchar(200)--,@BookPlaceID int
--set @BookPlaceID=2
set @allstring=''
select @allstring=@allstring+cast(BookPlaceID as varchar(10))+',' FROM [dbo].[GetBookPlaceChildrenId](@BookPlaceID) ORDER BY BookPlaceID --where CompanyID<>@CompanyID
set @allstring=LEFT(@allstring,LEN(@allstring)-1)
--select @allstring
RETURN @allstring
END
GO select [dbo].[GetBookPlaceGroupId] (2) --
--查位置所有子结点,带路径与排序
if object_id('GetBookPlaceParentLevel') is not null
drop function GetBookPlaceParentLevel
go
create function GetBookPlaceParentLevel(@id int)
returns @re table(BookPlaceID int,BookPlaceParent int,BookPlaceName nvarchar(100),[level] int,sort varchar(100),BookPlaceFullName nvarchar(500))
as
begin
declare @l int
set @l=0
insert @re
select BookPlaceID,BookPlaceParent,BookPlaceName,@l,right('000'+ltrim(BookPlaceID),3),BookPlaceName from BookPlaceList where BookPlaceParent=@id
while @@rowcount>0
begin
set @l=@l+1
insert @re
select a.BookPlaceID,a.BookPlaceParent,a.BookPlaceName,@l,b.sort+right('000'+ltrim(a.BookPlaceID),3), b.BookPlaceFullName+''+a.BookPlaceName from BookPlaceList as a,@re as b
where b.BookPlaceID=a.BookPlaceParent and b.[level]=@l-1
end
update @re set [level] = [level]
return
end
go select * from GetBookPlaceParentLevel(0) select * from GetBookPlaceParentLevel (0) where BookPlaceID<>1 select * from GetBookPlaceParentLevel (0) where BookPlaceID<>1 select * from GetBookPlaceParentLevel (0) where BookPlaceID<>1 and [level]=1 --測試結果
/*
2 1 第一层楼 1 001002 涂聚文图书位置目录第一层楼
3 1 第二层楼 1 001003 涂聚文图书位置目录第二层楼
4 2 第一排 2 001002004 涂聚文图书位置目录第一层楼第一排
6 2 第二排 2 001002006 涂聚文图书位置目录第一层楼第二排
7 4 第二层 3 001002004007 涂聚文图书位置目录第一层楼第一排第二层
8 4 第三层 3 001002004008 涂聚文图书位置目录第一层楼第一排第三层
5 4 第一层 3 001002004005 涂聚文图书位置目录第一层楼第一排第一层
12 4 第四层 3 001002004012 涂聚文图书位置目录第一层楼第一排第四层
9 6 第一层 3 001002006009 涂聚文图书位置目录第一层楼第二排第一层
10 6 第二层 3 001002006010 涂聚文图书位置目录第一层楼第二排第二层
11 6 第三层 3 001002006011 涂聚文图书位置目录第一层楼第二排第三层
*/
declare @id int
set @id = 3
;with t as--如果CTE前面有语句,需要用分号隔断
(
select BookKindID, BookKindParent, BookKindName
from BookKindList
where BookKindID = @id
union all
select r1.BookKindID,r1.BookKindParent,r1.BookKindName
from BookKindList r1 join t as r2 on r1.BookKindParent = r2.BookKindID
)
select * from t order by BookKindID -- 查找所有父节点
with tab as
(
select BookKindID,BookKindParent,BookKindName from BookKindList where BookKindID=3--子节点
union all
select b.BookKindID,b.BookKindParent,b.BookKindName
from
tab a,--子节点数据集
BookKindList b --父节点数据集
where a.BookKindParent=b.BookKindID --子节点数据集.parendID=父节点数据集.ID
)
select * from tab; -- 查找所有子节点
with tab as
(
select BookKindID,BookKindParent,BookKindName from BookKindList where BookKindID=3--父节点
union all
select b.BookKindID,b.BookKindParent,b.BookKindName
from
tab a,--父节点数据集
BookKindList b--子节点数据集
where b.BookKindParent=a.BookKindID --子节点数据集.ID=父节点数据集.parendID
)
select * from tab; --查找从子节点到定级节点的路径
with tab as
(
select BookKindID,BookKindParent,BookKindName,cast(BookKindID as varchar(100)) as fulltypeid
from BookKindList where BookKindID=3--子节点
union all
select
b.BookKindID,b.BookKindParent,b.BookKindName,
cast(a.fulltypeid+','+cast(b.BookKindID as nvarchar(100)) as varchar(100)) as fulltypeid
from
tab a,--子节点数据集
BookKindList b --父节点数据集
where a.BookKindParent=b.BookKindID --子节点数据集.parendID=父节点数据集.ID
)
select * from tab ;

sql: T-SQL parent-child function script的更多相关文章

  1. [NHibernate]Parent/Child

    系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate ...

  2. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  3. .NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1)

    原文:.NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1) 一.SQL Server 为什么要与CLR集成 1. SQL Server 提供的存储过程.函数 ...

  4. SQL开发——SQL语法

    文档资料参考: 参考:http://www.w3school.com.cn/sql/sql_syntax.asp 参考:http://wiki.jikexueyuan.com/project/sql/ ...

  5. SQL注入——SQL Injection

    本文部分内容转自:https://www.cnblogs.com/rush/archive/2011/12/31/2309203.html http://www.diybl.com/course/7_ ...

  6. SQL PL/SQL语法手册

    SQL  PL/SQL语法手册 目   录 第一部分  SQL语法部分 3 一. CREATE TABLE 语句 3 二. CREATE SEQUENCE语句 5 三. CREATE VIEW语句 6 ...

  7. (转)对存储过程进行加密和解密(SQL 2008/SQL 2012)

    原文地址:http://www.cnblogs.com/wghao/archive/2012/12/30/2837642.html 开始: 在网络上,看到有SQL Server 2000和SQL Se ...

  8. 13Microsoft SQL Server SQL 高级事务,锁,游标,分区

    Microsoft SQL Server SQL高级事务,锁,游标,分区 通过采用事务和锁机制,解决了数据库系统的并发性问题. 9.1数据库事务 (1)BEGIN TRANSACTION语句定义事务的 ...

  9. A simple way to monitor SQL server SQL performance.

    This is all begins from a mail. ... Dear sir: This is liulei. Thanks for your help about last PM for ...

  10. sql与SQL CODE和SQL State相关报错

    操作数据库过程中,遇到许多问题,很多都与SQL CODE和SQL State相关,现在把一个完整的SQLCODE和SQLState错误信息和相关解释作以下说明,一来可以自己参考,对DB2错误自行找出原 ...

随机推荐

  1. django中@property装饰器的运用

    python提供的内置装饰器——staticmethod.classmethod和property 在OSQA中,@property的使用频率是非常高的.下面就是它的使用方法: @property 可 ...

  2. POJ3076 Sudoku

    POJ3076 Sudoku 本题为16*16宫格 剪枝见代码 #include <cstdio> #include <iostream> #include <algor ...

  3. docker安装MySQL软件

    1 搜索mysql镜像 $ sudo docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a wi ...

  4. AVL树插入(Python实现)

    建立AVL树 class AVLNode(object): def __init__(self,data): self.data = data self.lchild = None self.rchi ...

  5. .net core webapi 在原有基础上修改。

    using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Lin ...

  6. 解决kvm虚拟机启动之后,网卡eth0变为eth1问题

    2018-12-19 故障前提 kvm虚拟机迁移到其他服务器上之后,重新启动网卡会出现问题 例如原网卡名称为eth0,迁移重启之后会自动变为eth1 为什么eth0会变成eth1? 很多Linux d ...

  7. UML-5-进化式需求

    1.需求管理定义 瀑布式式中,研发之前,完全定义和固化需求. 但,需求是不断变化的,你之前可能会有45%的需求,不会被使用到,经常使用到的只占20%左右. 因此,如何寻找这20%的需求,是重点.其方法 ...

  8. mAP(mean Average Precision)应用(转)

    原文章地址来自于知乎:https://www.zhihu.com/question/41540197 1. precision 和 recall 的计算(没什么好说的,图片示例相当棒): 图1 图中上 ...

  9. Mysql+innodb数据存储逻辑

    Mysql+innodb数据存储逻辑. 表空间由段,区,页组成 ibdata1:共享表空间.即所有的数据都存放在这个表空间内.如果用户启用了innodb_file_per_table,则每张表内的数据 ...

  10. C# 字符串转枚举类型

    Enum.Parse(typeof(枚举类型), 字符串类型) 如:在Unity中, Enum.Parse(typeof(SystemLanguage), "Chinese")