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错误自行找出原 ...
随机推荐
- js计算器案例
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>j ...
- [短期持续更新]Codeforces 构造题一览
说实话我觉得做这种题很没意思(不够硬核), 可是人有短板终究是要补的...起码这种类型补起来相对简单 所以还是把先前准备好的专题放下吧,做点实现上比较休闲的题 ps.为了精简篇幅,代码全部丢到ubun ...
- 红米手机3S 3X简单卡刷开发版获得ROOT权限的方法
小米的机器不同手机型号一般小米论坛都提供两个不同的系统,即分别是稳定版和开发版,稳定版没有提供root权限管理,开发版中就支持了root权限,很多情况下我们需要使用的一些功能强大的APP,都需要在ro ...
- 使用Session监听器实现统计在线人数
使用Session监听器实现统计在线人数 1.工作目录结构 包含监听器类和jsp页面 2.session监听器 首先利用session监听器来实现对访问网站时的session计数,当有session创 ...
- this和target目标对象的区别
在事件函数中 event.target和this是一样的效果吗? this是调用方法的对象, evemt.target事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素.文档或窗口. ...
- Net操作Excel,不依赖服务器端环境配置(终极方法NPOI)转。
这是起因,为什么会需要用到这个,主要是分析了一下为什么从oledb那个方式换成这个方式.文章见链接 http://www.cnblogs.com/Jerseyblog/p/6410703.html 前 ...
- 查看修复HDFS中丢失的块
检测缺失块 hdfs fsck -list-corruptfileblocks hdfs fsck / | egrep -v '^\.+$' | grep -v eplica 查看上面某一个文件的情况 ...
- 【ExtJS】 布局Layout
布局用于定义容器如何组织内部子元素和控制子元素的大小. ExtJS中有两种类型的布局:Container容器类布局与Component组件类布局. Containter容器类布局:负责容器内容Extj ...
- Mongodb cassandra 和 Mysql对比
MongoDBDB.Cassandra和 Mysql对比 1.为什么是Nosql? 1.1 Nosql在大数据处理相对于关系型数据库具有优势 1.1.1 1. 低延迟 ...
- MySQL优化--创建索引,以及怎样索引才会生效 (03)
1. 创建索引 (看这里) 2.索引在什么情况下才会起作用(重点)