sql: T-SQL parent-child function script
--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的更多相关文章
- [NHibernate]Parent/Child
系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- .NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1)
原文:.NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1) 一.SQL Server 为什么要与CLR集成 1. SQL Server 提供的存储过程.函数 ...
- SQL开发——SQL语法
文档资料参考: 参考:http://www.w3school.com.cn/sql/sql_syntax.asp 参考:http://wiki.jikexueyuan.com/project/sql/ ...
- SQL注入——SQL Injection
本文部分内容转自:https://www.cnblogs.com/rush/archive/2011/12/31/2309203.html http://www.diybl.com/course/7_ ...
- SQL PL/SQL语法手册
SQL PL/SQL语法手册 目 录 第一部分 SQL语法部分 3 一. CREATE TABLE 语句 3 二. CREATE SEQUENCE语句 5 三. CREATE VIEW语句 6 ...
- (转)对存储过程进行加密和解密(SQL 2008/SQL 2012)
原文地址:http://www.cnblogs.com/wghao/archive/2012/12/30/2837642.html 开始: 在网络上,看到有SQL Server 2000和SQL Se ...
- 13Microsoft SQL Server SQL 高级事务,锁,游标,分区
Microsoft SQL Server SQL高级事务,锁,游标,分区 通过采用事务和锁机制,解决了数据库系统的并发性问题. 9.1数据库事务 (1)BEGIN TRANSACTION语句定义事务的 ...
- 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 ...
- sql与SQL CODE和SQL State相关报错
操作数据库过程中,遇到许多问题,很多都与SQL CODE和SQL State相关,现在把一个完整的SQLCODE和SQLState错误信息和相关解释作以下说明,一来可以自己参考,对DB2错误自行找出原 ...
随机推荐
- java学习笔记_多态
多态:父类的变量可以引用子类的对象 引用: Student s1 = stu; s1.setScore(200); 1.一个对象可以有多个引用,可以有多个变量操作同一个对象 2.当一个对象没有任何 ...
- 怎么使用Vue-cli3开发像iview、element那样的组件可下载直接使用
https://www.cnblogs.com/wisewrong/archive/2018/12/28/10186611.html 参考这个就行. 而我这篇文章主要是对里面的相关步骤作一些简单的说明 ...
- WeakHashMap源码分析
WeakHashMap是一种弱引用map,内部的key会存储为弱引用, 当jvm gc的时候,如果这些key没有强引用存在的话,会被gc回收掉, 下一次当我们操作map的时候会把对应的Entry整个删 ...
- Codeforces - 914C 数位DP
题意有点难以描述,简略的就是给定一个二进制\(n\),每一步操作能使\(n\)的位为1的数的和转化为一个十进制,然后转化为该数的二进制再进行相同的操作 查询\([0,n]\)中操作数恰好为\(k\)的 ...
- EXCEL 使用宏 打水印
Sub 宏1() ' ' 宏1 宏 //用于调整列宽 加边框 ' ' 快捷键: Ctrl+w ' ActiveCell.Cells.Select ActiveCell.Cells.EntireColu ...
- centos7 装机配置及 mysql 安装过程
打开网卡,使操作系统可以上网 1 ip add 查看网卡,lo是回环网卡可以忽略,ens33为实际网卡. [root@localhost ~]# ip add 1: lo: <LOOPBACK, ...
- 股神 C++
题目描述 有股神吗? 有,小赛就是! 经过严密的计算,小赛买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天...依此类推. 为 ...
- 2019美国大学生数学建模竞赛B题(思路)
建模比赛已经过去三天了,但留校的十多天里,自己的收获与感受依然长存于心.下面的大致流程,很多并没有细化,下面很多情况都是在假设下进行的,比如假设飞机能够来回运送药品,运货无人机就只运货,在最大视距下侦 ...
- 带有权重的服务器SLB的实现
1)参考了网络上的算法,但是那个算法仅仅是用于展示“权重轮循”的意图,在真正的网络下,因为是并行的,所以不可能单纯一个简单的循环可以解决问题. 2)用lock的话性能显然有损失. 3)想了一阵,结合C ...
- GraphQL 总结 + 在Django应用(Graphene)
由Xmind编辑,下次更新会附加python demo. 附件列表