1. /*
  2. 标题:查询指定节点及其所有子节点的函数
  3. 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
  4. 时间:2008-05-12
  5. 地点:广东深圳
  6. */
  7.  
  8. create table tb(id varchar(3) , pid varchar(3) , name varchar(10))
  9. insert into tb values('' , null , '广东省')
  10. insert into tb values('' , '' , '广州市')
  11. insert into tb values('' , '' , '深圳市')
  12. insert into tb values('' , '' , '天河区')
  13. insert into tb values('' , '' , '罗湖区')
  14. insert into tb values('' , '' , '福田区')
  15. insert into tb values('' , '' , '宝安区')
  16. insert into tb values('' , '' , '西乡镇')
  17. insert into tb values('' , '' , '龙华镇')
  18. insert into tb values('' , '' , '松岗镇')
  19. go
  20.  
  21. --查询指定节点及其所有子节点的函数
  22. create function f_cid(@ID varchar(3)) returns @t_level table(id varchar(3) , level int)
  23. as
  24. begin
  25. declare @level int
  26. set @level = 1
  27. insert into @t_level select @id , @level
  28. while @@ROWCOUNT > 0
  29. begin
  30. set @level = @level + 1
  31. insert into @t_level select a.id , @level
  32. from tb a , @t_Level b
  33. where a.pid = b.id and b.level = @level - 1
  34. end
  35. return
  36. end
  37. go
  38.  
  39. --调用函数查询001(广东省)及其所有子节点
  40. select a.* from tb a , f_cid('') b where a.id = b.id order by a.id
  41. /*
  42. id pid name
  43. ---- ---- ----------
  44. 001 NULL 广东省
  45. 002 001 广州市
  46. 003 001 深圳市
  47. 004 002 天河区
  48. 005 003 罗湖区
  49. 006 003 福田区
  50. 007 003 宝安区
  51. 008 007 西乡镇
  52. 009 007 龙华镇
  53. 010 007 松岗镇
  54.  
  55. (所影响的行数为 10 行)
  56. */
  57.  
  58. --调用函数查询002(广州市)及其所有子节点
  59. select a.* from tb a , f_cid('') b where a.id = b.id order by a.id
  60. /*
  61. id pid name
  62. ---- ---- ----------
  63. 002 001 广州市
  64. 004 002 天河区
  65.  
  66. (所影响的行数为 2 行)
  67. */
  68.  
  69. --调用函数查询003(深圳市)及其所有子节点
  70. select a.* from tb a , f_cid('') b where a.id = b.id order by a.id
  71. /*
  72. id pid name
  73. ---- ---- ----------
  74. 003 001 深圳市
  75. 005 003 罗湖区
  76. 006 003 福田区
  77. 007 003 宝安区
  78. 008 007 西乡镇
  79. 009 007 龙华镇
  80. 010 007 松岗镇
  81.  
  82. (所影响的行数为 7 行)
  83. */
  84.  
  85. drop table tb
  86. drop function f_cid
  1. /*
  2. 标题:查询指定节点及其所有父节点的函数
  3. 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
  4. 时间:2008-05-12
  5. 地点:广东深圳
  6. */
  7.  
  8. create table tb(id varchar(3) , pid varchar(3) , name varchar(10))
  9. insert into tb values('' , null , '广东省')
  10. insert into tb values('' , '' , '广州市')
  11. insert into tb values('' , '' , '深圳市')
  12. insert into tb values('' , '' , '天河区')
  13. insert into tb values('' , '' , '罗湖区')
  14. insert into tb values('' , '' , '福田区')
  15. insert into tb values('' , '' , '宝安区')
  16. insert into tb values('' , '' , '西乡镇')
  17. insert into tb values('' , '' , '龙华镇')
  18. insert into tb values('' , '' , '松岗镇')
  19. go
  20.  
  21. --查询指定节点及其所有父节点的函数
  22. create function f_pid(@id varchar(3)) returns @t_level table(id varchar(3))
  23. as
  24. begin
  25. insert into @t_level select @id
  26. select @id = pid from tb where id = @id and pid is not null
  27. while @@ROWCOUNT > 0
  28. begin
  29. insert into @t_level select @id select @id = pid from tb where id = @id and pid is not null
  30. end
  31. return
  32. end
  33. go
  34.  
  35. --调用函数查询002(广州市)及其所有父节点
  36. select a.* from tb a , f_pid('') b where a.id = b.id order by a.id
  37. /*
  38. id pid name
  39. ---- ---- ----------
  40. 001 NULL 广东省
  41. 002 001 广州市
  42.  
  43. (所影响的行数为 2 行)
  44. */
  45.  
  46. --调用函数查询003(深圳市)及其所有父节点
  47. select a.* from tb a , f_pid('') b where a.id = b.id order by a.id
  48. /*
  49. id pid name
  50. ---- ---- ----------
  51. 001 NULL 广东省
  52. 003 001 深圳市
  53.  
  54. (所影响的行数为 2 行)
  55. */
  56.  
  57. --调用函数查询008(西乡镇)及其所有父节点
  58. select a.* from tb a , f_pid('') b where a.id = b.id order by a.id
  59. /*
  60. id pid name
  61. ---- ---- ----------
  62. 001 NULL 广东省
  63. 003 001 深圳市
  64. 007 003 宝安区
  65. 008 007 西乡镇
  66.  
  67. (所影响的行数为 4 行)
  68. */
  69.  
  70. drop table tb
  71. drop function f_pid

SQL SERVER树型数据处理时,函数递归调用问题,查询根节点,子节点函数的更多相关文章

  1. SQL2005:SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作的解决办法

    SQL2005 还原数据库失败,提示如下: SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作的解决办法 出现错误时操作步骤为:右击数据库--->任务- ...

  2. 使用SQL Server 2008远程链接时SQL数据库不成功的解决方法

    关键设置: 第一步(SQL2005.SQL2008): 开始-->程序-->Microsoft SQL Server 2008(或2005)-->配置工具-->SQL Serv ...

  3. 安装sql server 2008 management studio时,提示升级VS2008 到 SP1

    安装sql server 2008 management studio时,提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本.请在安装 SQL Serve ...

  4. 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 ...

  5. SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作的解决办法

    SQL2005 还原数据库失败,提示如下: SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作的解决办法 出现错误时操作步骤为:右击数据库--->任务- ...

  6. 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用

    5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ...

  7. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  8. gcc O2优化选项对内嵌汇编以及函数递归调用的影响

    学习和使用c这些年来,很多方面都未深入研究过,就如脱离了IDE后,我可能连编译一个c文件的命令都写不出来. 最近需要在c中内嵌汇编解决问题,参考网上相关的资料写了一段汇编代码,在测试的时候时好时坏,找 ...

  9. day14函数递归调用

    day14函数递归调用 1.装饰器叠加 def deco1(func1): def wrapper1(*args,**kwargs): print('=====>wrapper1 ') res1 ...

随机推荐

  1. 当"唐僧"没那么容易

    西游记 西游记的故事,无人不知. 但西游记里面的哲学与道理,却仍然值得我们去思考. 记得之前曾有一篇文章写到了西游记与团队管理,师徒四人就是一个完美的团队.之所以能够爬山涉水.克服万难,求得真经,无疑 ...

  2. 浅谈Redis数据库的键值设计(转)

    丰富的数据结构使得redis的设计非常的有趣.不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与.redis的DBA需要熟悉 ...

  3. Kmeans算法学习与SparkMlLib Kmeans算法尝试

    K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的方法,逐次更新各聚类中心的 ...

  4. 3. Windows根据端口查进程---ADB 相关报错 ADB server didn't ACK cannot bind ':5037'

    1.ADB server didn't ACK,一般报ADB相关的错误,大部分是端口被占用了 处理方法: 在命令行输入>adb nodaemon server 如果返回: cannot bind ...

  5. 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 其他类似

  6. linux命令(2):df 磁盘占用

    在这里先讲讲linux命令df的资料: df 命令: linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信 ...

  7. eclipse的shell相关插件

    1.Easy Shell a. 功能 可以在Eclipse IDE里选中一个文件或目录,利用Easy Sehll直接跳转到Sehll窗口,很方便 b. 安装 Help - Install New So ...

  8. Java中的注解是如何工作的?--annotation学习一

    自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解.这篇文章中,我将向大家讲述 ...

  9. 30天轻松学习javaweb_http头信息实例

    package com.wzh.test.http; import java.io.ByteArrayOutputStream;import java.io.IOException;import ja ...

  10. SQL 优化原则

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...