SQL SERVER树型数据处理时,函数递归调用问题,查询根节点,子节点函数
- /*
- 标题:查询指定节点及其所有子节点的函数
- 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
- 时间:2008-05-12
- 地点:广东深圳
- */
- create table tb(id varchar(3) , pid varchar(3) , name varchar(10))
- insert into tb values('' , null , '广东省')
- insert into tb values('' , '' , '广州市')
- insert into tb values('' , '' , '深圳市')
- insert into tb values('' , '' , '天河区')
- insert into tb values('' , '' , '罗湖区')
- insert into tb values('' , '' , '福田区')
- insert into tb values('' , '' , '宝安区')
- insert into tb values('' , '' , '西乡镇')
- insert into tb values('' , '' , '龙华镇')
- insert into tb values('' , '' , '松岗镇')
- go
- --查询指定节点及其所有子节点的函数
- create function f_cid(@ID varchar(3)) returns @t_level table(id varchar(3) , level int)
- as
- begin
- declare @level int
- set @level = 1
- insert into @t_level select @id , @level
- while @@ROWCOUNT > 0
- begin
- set @level = @level + 1
- insert into @t_level select a.id , @level
- from tb a , @t_Level b
- where a.pid = b.id and b.level = @level - 1
- end
- return
- end
- go
- --调用函数查询001(广东省)及其所有子节点
- select a.* from tb a , f_cid('') b where a.id = b.id order by a.id
- /*
- id pid name
- ---- ---- ----------
- 001 NULL 广东省
- 002 001 广州市
- 003 001 深圳市
- 004 002 天河区
- 005 003 罗湖区
- 006 003 福田区
- 007 003 宝安区
- 008 007 西乡镇
- 009 007 龙华镇
- 010 007 松岗镇
- (所影响的行数为 10 行)
- */
- --调用函数查询002(广州市)及其所有子节点
- select a.* from tb a , f_cid('') b where a.id = b.id order by a.id
- /*
- id pid name
- ---- ---- ----------
- 002 001 广州市
- 004 002 天河区
- (所影响的行数为 2 行)
- */
- --调用函数查询003(深圳市)及其所有子节点
- select a.* from tb a , f_cid('') b where a.id = b.id order by a.id
- /*
- id pid name
- ---- ---- ----------
- 003 001 深圳市
- 005 003 罗湖区
- 006 003 福田区
- 007 003 宝安区
- 008 007 西乡镇
- 009 007 龙华镇
- 010 007 松岗镇
- (所影响的行数为 7 行)
- */
- drop table tb
- drop function f_cid
- /*
- 标题:查询指定节点及其所有父节点的函数
- 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
- 时间:2008-05-12
- 地点:广东深圳
- */
- create table tb(id varchar(3) , pid varchar(3) , name varchar(10))
- insert into tb values('' , null , '广东省')
- insert into tb values('' , '' , '广州市')
- insert into tb values('' , '' , '深圳市')
- insert into tb values('' , '' , '天河区')
- insert into tb values('' , '' , '罗湖区')
- insert into tb values('' , '' , '福田区')
- insert into tb values('' , '' , '宝安区')
- insert into tb values('' , '' , '西乡镇')
- insert into tb values('' , '' , '龙华镇')
- insert into tb values('' , '' , '松岗镇')
- go
- --查询指定节点及其所有父节点的函数
- create function f_pid(@id varchar(3)) returns @t_level table(id varchar(3))
- as
- begin
- insert into @t_level select @id
- select @id = pid from tb where id = @id and pid is not null
- while @@ROWCOUNT > 0
- begin
- insert into @t_level select @id select @id = pid from tb where id = @id and pid is not null
- end
- return
- end
- go
- --调用函数查询002(广州市)及其所有父节点
- select a.* from tb a , f_pid('') b where a.id = b.id order by a.id
- /*
- id pid name
- ---- ---- ----------
- 001 NULL 广东省
- 002 001 广州市
- (所影响的行数为 2 行)
- */
- --调用函数查询003(深圳市)及其所有父节点
- select a.* from tb a , f_pid('') b where a.id = b.id order by a.id
- /*
- id pid name
- ---- ---- ----------
- 001 NULL 广东省
- 003 001 深圳市
- (所影响的行数为 2 行)
- */
- --调用函数查询008(西乡镇)及其所有父节点
- select a.* from tb a , f_pid('') b where a.id = b.id order by a.id
- /*
- id pid name
- ---- ---- ----------
- 001 NULL 广东省
- 003 001 深圳市
- 007 003 宝安区
- 008 007 西乡镇
- (所影响的行数为 4 行)
- */
- drop table tb
- drop function f_pid
SQL SERVER树型数据处理时,函数递归调用问题,查询根节点,子节点函数的更多相关文章
- SQL2005:SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作的解决办法
SQL2005 还原数据库失败,提示如下: SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作的解决办法 出现错误时操作步骤为:右击数据库--->任务- ...
- 使用SQL Server 2008远程链接时SQL数据库不成功的解决方法
关键设置: 第一步(SQL2005.SQL2008): 开始-->程序-->Microsoft SQL Server 2008(或2005)-->配置工具-->SQL Serv ...
- 安装sql server 2008 management studio时,提示升级VS2008 到 SP1
安装sql server 2008 management studio时,提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本.请在安装 SQL Serve ...
- sql server 2008安装的时候选NT AUTHORITY\NEWORK SERVICE 还是选 NT AUTHORITY\SYSTEM ?
sql server 2008安装的时候选NT AUTHORITY\NEWORK SERVICE 还是选 NT AUTHORITY\SYSTEM ? sql server 2008安装的时候选NT A ...
- SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作的解决办法
SQL2005 还原数据库失败,提示如下: SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作的解决办法 出现错误时操作步骤为:右击数据库--->任务- ...
- 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用
5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- gcc O2优化选项对内嵌汇编以及函数递归调用的影响
学习和使用c这些年来,很多方面都未深入研究过,就如脱离了IDE后,我可能连编译一个c文件的命令都写不出来. 最近需要在c中内嵌汇编解决问题,参考网上相关的资料写了一段汇编代码,在测试的时候时好时坏,找 ...
- day14函数递归调用
day14函数递归调用 1.装饰器叠加 def deco1(func1): def wrapper1(*args,**kwargs): print('=====>wrapper1 ') res1 ...
随机推荐
- 当"唐僧"没那么容易
西游记 西游记的故事,无人不知. 但西游记里面的哲学与道理,却仍然值得我们去思考. 记得之前曾有一篇文章写到了西游记与团队管理,师徒四人就是一个完美的团队.之所以能够爬山涉水.克服万难,求得真经,无疑 ...
- 浅谈Redis数据库的键值设计(转)
丰富的数据结构使得redis的设计非常的有趣.不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与.redis的DBA需要熟悉 ...
- Kmeans算法学习与SparkMlLib Kmeans算法尝试
K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的方法,逐次更新各聚类中心的 ...
- 3. Windows根据端口查进程---ADB 相关报错 ADB server didn't ACK cannot bind ':5037'
1.ADB server didn't ACK,一般报ADB相关的错误,大部分是端口被占用了 处理方法: 在命令行输入>adb nodaemon server 如果返回: cannot bind ...
- 2.Could not open Selected VM debug port (8700). Make sure you do not have another instance of DDMS or of the eclipse plugin running
在eclipse.ini配置文件最后加上:-Djava.net.preferIPv4Stack=true 其他类似
- linux命令(2):df 磁盘占用
在这里先讲讲linux命令df的资料: df 命令: linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信 ...
- eclipse的shell相关插件
1.Easy Shell a. 功能 可以在Eclipse IDE里选中一个文件或目录,利用Easy Sehll直接跳转到Sehll窗口,很方便 b. 安装 Help - Install New So ...
- Java中的注解是如何工作的?--annotation学习一
自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解.这篇文章中,我将向大家讲述 ...
- 30天轻松学习javaweb_http头信息实例
package com.wzh.test.http; import java.io.ByteArrayOutputStream;import java.io.IOException;import ja ...
- SQL 优化原则
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...