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

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中使用CTE进行递归查询是一种高效且易于理解的方法。通过定义基础情况和递归规则,可以轻松地获取所有上级或下级数据。然而,在实际应用过程中,还需要综合考虑性能等因素,...

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

    在SQL Server中,递归查询是一种强大的工具,用于处理层级数据或树状结构的数据,例如组织结构、部门关系等。本文将深入探讨如何利用递归查询来获取子节点和父节点的信息。 一、查询当前部门下的所有子部门 在SQL ...

    sql server 分页存贮,联查,下级查询上级

    在SQL Server数据库管理系统中,处理大量数据时,分页存储、联查(JOIN)和下级查询上级(Hierarchical Query)是常见的操作。这些技术对于优化数据检索性能、构建复杂的数据关系以及展示层次结构信息至关重要。 一...

    Sqlserver2000经典脚本

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

    数据库sqlserver攻关

    排序是SQL查询中的一个重要方面,经常使用ORDER BY子句来对查询结果进行排序。排序可以按照升序(ASC)或降序(DESC)执行。 ### SQL查询出来的结果转化为.txt文件 在SQL Server中,可以使用BULK INSERT语句将查询...

    MS SQL Server树形结构表遍历的循环算法.pdf

    在MS SQL Server中,需要编写特定的SQL语句来模拟递归查询的过程,即通过循环在表中逐层查找子节点,直到遍历完所有的节点。 文章的引言部分强调了实现树形结构表遍历查询操作的重要意义,以及在MS SQL Server中...

    sqlserver父子层次查询.pdf

    本文件"sqlserver父子层次查询.pdf"主要探讨了如何使用递归公共表表达式(Recursive Common Table Expression, CTE)来解决这类问题。下面将详细解释相关知识点。 1. **递归公共表表达式(Recursive CTE)**: ...

    无限分级------C#+sqlserver

    【标题】"无限分级------C#+sqlserver"所涉及的知识点主要集中在数据库设计与编程实现上,特别是如何在C#应用程序中使用SQL Server数据库来处理具有层级关系的数据。无限分级通常指的是在数据库中存储的数据结构呈现...

    sql查询某个parentid下的所有childid

    它基于一个称为“连接路径”的概念,允许用户按照某种层次关系对表进行递归查询。主要用到的关键字有: - **PRIOR**:用于指定父行和子行之间的关系。 - **START WITH**:指定递归查询的起始行。 - **CONNECT BY**...

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

    本主题聚焦于如何在SQL Server中进行递归查询,以获取表中的上下级节点关系。 首先,我们要明确一个关键概念——递归查询。递归查询是一种通过反复调用自身来解决复杂问题的方法。在SQL中,我们通常使用`WITH ...

    用SQL实现树的查询

    在关系型数据库中,如SQL Server 2000,处理树形结构的数据是一项挑战。树形结构的数据通常体现在层级关系上,比如组织架构、产品分类等,每个节点都有可能拥有子节点。在SQL中查询这类数据时,我们需要利用特定的...

    SQLServer基础查询练习附答案.pdf

    根据提供的文件信息,我们可以归纳出以下关键知识点: ### 一、创建数据库 ...以上知识点覆盖了从创建数据库到配置各项选项、创建表结构以及插入数据的基本流程,是SQL Server基础查询练习中的重要内容。

    高级查询sql题目

    8. **CROSS APPLY和OUTER APPLY**:在某些数据库系统中(如SQL Server),这些运算符允许将一个查询的结果作为另一个查询的输入,用于复杂的数据处理和分析。 9. **UNION和INTERSECT**:UNION用于合并两个或更多...

    用SQL实现线性表的非线性逻辑模型的查询.pdf

    在SQLSERVER2000中,可以通过创建递归函数(如“GetManager”函数示例)来实现递归查询。递归函数通常包含两个部分:基本情况(终止递归的条件)和递归步骤(实现递归调用的逻辑)。 ### 知识点六:关系数据库中...

    经典SQL脚本大全

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

    一列保存多个ID(将多个用逗号隔开的ID转换成用逗号隔开的名称)

    第二步,由于SQL Server没有内置的字符串聚合函数,我们需要自己实现这个功能。这里可以借鉴处理树形结构数据的方法,通过递归公共表表达式(CTE)来完成聚合。创建名为`EmployeT`的CTE,先将`deptIds`拆分成多行,...

    部门分列sql.zip_实现组织构架类似excel分列功能

    在标题为"部门分列sql.zip_实现组织构架类似excel分列功能"的压缩包中,我们聚焦于一个具体的问题:如何将具有层级结构的部门信息,如"部门1/部门2/部门3",转换成独立的多个字段,以便于在数据库中存储和分析。...

    TreeView绑定SQL数据库

    在本示例中,“TreeView绑定SQL数据库”意味着我们将探讨如何将`TreeView`控件与SQL Server数据库连接,以便从数据库中检索数据并以树形结构展示。这个过程涉及多个关键步骤,包括数据库连接、查询执行、数据处理...

Global site tag (gtag.js) - Google Analytics