`
wmj2003
  • 浏览: 97568 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

sqlserver2000中如何对部门进行递归查询

阅读更多

部门表的数据结构

/*==============================================================*/
/* Table: qxgl_dept */
/*==============================================================*/
create table qxgl_dept (
dept_id varchar(32) not null, --部门id
dept_name varchar(32) not null, --部门名称
dept_code varchar(32) null, --部门代码
dept_parent_id varchar(32) not null, --父部门
dept_level int not null, --部门级别
dept_id_path varchar(1024) not null, --部门id全路径
dept_fullname varchar(1024) not null, --部门全称
dept_order_id int not null default 0, --部门排序号
dept_area varchar(32) not null,
dept_type varchar(32) not null default '0',
dept_linkman varchar(32) null,
dept_linkmanphone varchar(32) null,
dept_email varchar(32) null,
dept_phone varchar(32) null,
dept_fax varchar(32) null,
dept_address varchar(255) null,
dept_postalcode varchar(32) null,
dept_introduce varchar(2000) null,
dept_create_time timestamp null default getdate(),
constraint PK_QXGL_DEPT primary key (dept_id),
constraint AK_KEY_2_QXGL_DEP unique (dept_name)
)
go

--首先在sqlserver2000中创建用户函数
--查询父单位的函数
CREATE Function GetParentDept(@dept_id varchar(32), @Level int)
Returns @Parents Table([dept_id] varchar(32) ,[dept_name] varchar(128),[dept_parent_id] varchar(32))
As
Begin
If @Level < 1 --如果参数@Level小于“1”,则得到所有父单位
Begin
Insert @Parents
Select dept_id,dept_name,dept_parent_id
From [qxgl_dept]
Where [dept_id] = (Select [dept_parent_id]
From [qxgl_dept] Where [dept_id]=@dept_id)

While @@ROWCOUNT > 0
Begin
Insert @Parents
Select B.dept_id,B.dept_name,B.dept_parent_id
From @Parents A Inner Join [qxgl_dept] B
On A.[dept_parent_id]=B.[dept_id]
Where B.[dept_parent_id] Not In
(Select Distinct [dept_parent_id] From @Parents)
End
End
Else
Begin
Set @level = @Level -1

Insert @Parents
Select dept_id,dept_name,dept_parent_id
From [qxgl_dept]
Where [dept_id] = (Select [dept_parent_id]
From [qxgl_dept] Where [dept_id]=@dept_id)

While @@ROWCOUNT > 0 And @level > 0
Begin
Set @level = @Level -1
Insert @Parents
Select B.dept_id,B.dept_name,B.dept_parent_id
From @Parents A Inner Join [qxgl_dept] B
On A.[dept_parent_id]=B.[dept_id]
Where B.[dept_parent_id] Not In
(Select Distinct [dept_parent_id] From @Parents)
End
End
Return
End

--查询子单位的函数
CREATE Function GetChildDept(@dept_id varchar(32), @Level int)
Returns @Child Table([dept_id] varchar(32) ,[dept_name] varchar(64),[dept_parent_id] varchar(32))
As
Begin
If @Level < 1 --如果参数@Level小于“1”,则得到所有子单位
Begin
Insert @Child
Select dept_id,dept_name,dept_parent_id
From [qxgl_dept] Where [dept_parent_id] = @dept_id
While @@ROWCOUNT > 0
Begin
Insert @Child
Select B.dept_id,B.dept_name,B.dept_parent_id
From @Child A Inner Join [qxgl_dept] B
On A.[dept_id]=B.[dept_parent_id]
Where B.[dept_parent_id] Not In
(Select Distinct [dept_parent_id] From @Child)
End
End
Else
Begin
Set @level = @Level -1
Insert @Child
Select dept_id,dept_name,dept_parent_id
From [qxgl_dept] Where [dept_parent_id]=@dept_id
While @@ROWCOUNT > 0 And @level > 0
Begin
Set @level = @Level -1
Insert @Child
Select B.dept_id,B.dept_name,B.dept_parent_id
From @Child A Inner Join [qxgl_dept] B
On A.[dept_id]=B.[dept_parent_id]
Where B.[dept_parent_id] Not In
(Select Distinct [dept_parent_id] From @Child)
End
End
Return
End

--查询
select * from GetParentDept('402881601b553a1d011b553d31c2000b',0)
select * from GetChildDept('dept111122223333444455556666dept',1)

--删除函数
drop Function GetParentDept
drop Function GetChildDept

分享到:
评论

相关推荐

    sql server 2008 递归查询所有上级或下级数据

    sql server 2008 递归查询所有上级或下级数据

    Sqlserver2000经典脚本

    介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...

    sql server递归子节点、父节点sql查询表结构的实例

    本文通过实例给大家介绍了sql server递归子节点、父节点sql查询表结构的实例解析,非常不错,具有参考借鉴价值,需要的的朋友参考下

    递归查询子级和父级.rar_数据库系统_SQL_

    在sqlserver中查询表的上下级节点

    经典SQL脚本大全

    │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ ...

    部门表测试数据

    用于递归测试数据,帖子地址 http://bbs.csdn.net/topics/390712713?page=1#new_post

    Java面试宝典2010版

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 17.介绍一下Hibernate的二级缓存 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message 属性, ...

    最新Java面试宝典pdf版

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    Java面试笔试资料大全

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    JAVA面试宝典2010

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    Java面试宝典-经典

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    java面试题大全(2012版)

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    Java面试宝典2012版

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message...

    java面试宝典2012

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 135 17.介绍一下Hibernate的二级缓存 135 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    Java面试宝典2012新版

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    万能后台管理模板javaweb

    反向生成: 任意连接其它数据库(mysql、oracle、sqlserver),根据表反射生成本系统的模块 10. 性能监控:监控整个系统的性能,SQL监控,SQL防火墙,URL监控,SPRING监控,SESSION监控等 11. 接口测试:POST or GET ...

Global site tag (gtag.js) - Google Analytics