我现在表结构:F_DEPT_ID,F_PARENT_DEPTID,F_DEPT_NAME
记录 : 1 0 一级部门
2 1 二级部门
3 2 三级部门a
4 2 三级部门b
5 2 三级部门c我现在取得F_DEPT_ID的id为1,我想取得如下记录
2 1 二级部门
3 2 三级部门a
4 2 三级部门b
5 2 三级部门c如果为2
3 2 三级部门a
4 2 三级部门b
5 2 三级部门c是请递归还是用其他方法实现该存储过程
记录 : 1 0 一级部门
2 1 二级部门
3 2 三级部门a
4 2 三级部门b
5 2 三级部门c我现在取得F_DEPT_ID的id为1,我想取得如下记录
2 1 二级部门
3 2 三级部门a
4 2 三级部门b
5 2 三级部门c如果为2
3 2 三级部门a
4 2 三级部门b
5 2 三级部门c是请递归还是用其他方法实现该存储过程
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([F_DEPT_ID] [int],[F_PARENT_DEPTID] [int],[F_DEPT_NAME] [nvarchar](10))
INSERT INTO [tb]
SELECT '1','0','一级部门' UNION ALL
SELECT '2','1','二级部门' UNION ALL
SELECT '3','2','三级部门a' UNION ALL
SELECT '4','2','三级部门b' UNION ALL
SELECT '5','2','三级部门c'--SELECT * FROM [tb]-->SQL查询如下:
DECLARE @id INT
SET @id=2
;WITH t AS
(
SELECT * FROM tb WHERE F_DEPT_ID=@id
UNION ALL
SELECT tb.* FROM tb,t WHERE tb.F_PARENT_DEPTID=t.F_DEPT_ID
)
SELECT * FROM t WHERE F_DEPT_ID<>@id
/*
F_DEPT_ID F_PARENT_DEPTID F_DEPT_NAME
----------- --------------- -----------
3 2 三级部门a
4 2 三级部门b
5 2 三级部门c(3 行受影响)
*/05的参考
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Create date: 20:36 2010-7-5
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE usp_GetListByTreeID
@DEPT_ID INT
AS
BEGIN
SET NOCOUNT ON; if object_id('[tb]') is not null drop table [tb]
create table [tb] (F_DEPT_ID INT,F_PARENT_DEPTID INT,F_DEPT_NAME varchar(50))
insert into [tb]
select 1,0,'一级部门' union all
select 2,1,'二级部门' union all
select 3,2,'三级部门a' union all
select 4,2,'三级部门b' union all
select 5,2,'三级部门c'
SELECT * FROM [tb] ;WITH t AS
(
SELECT * FROM tb WHERE F_DEPT_ID=@DEPT_ID
UNION ALL
SELECT tb.* FROM tb,t WHERE tb.F_PARENT_DEPTID=t.F_DEPT_ID
)
SELECT * FROM t WHERE F_DEPT_ID<>@DEPT_IDEND
GO
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Create date: 20:36 2010-7-5
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE usp_GetListByTreeID
@DEPT_ID INT
AS
BEGIN
SET NOCOUNT ON; if object_id('[tb]') is not null drop table [tb]
create table [tb] (F_DEPT_ID INT,F_PARENT_DEPTID INT,F_DEPT_NAME varchar(50))
insert into [tb]
select 1,0,'一级部门' union all
select 2,1,'二级部门' union all
select 3,2,'三级部门a' union all
select 4,2,'三级部门b' union all
select 5,2,'三级部门c'
SELECT * FROM [tb] ;WITH t AS
(
SELECT * FROM tb WHERE F_DEPT_ID=@DEPT_ID
UNION ALL
SELECT tb.* FROM tb,t WHERE tb.F_PARENT_DEPTID=t.F_DEPT_ID
)
SELECT * FROM t WHERE F_DEPT_ID<>@DEPT_IDEND
GO