with
district as
(
-- 获得第一个结果集,并更新最终结果集
select * from department where Depart_name= '市场部'
union all
-- 下面的select语句首先会根据从上一个查询结果集中获得的id值来查询parent_id
-- 字段的值,然后district就会变当前的查询结果集,并继续执行下面的select 语句
-- 如果结果集不为null,则与最终的查询结果合并,同时用合并的结果更新最终的查
-- 询结果;否则停止执行。最后district的结果集就是最终结果集。
select a.* from department a, district b
where a.Depar_fatherid = b.Depart_id
)
select * from district这是在SQL2005里面写的一个递归查询,能够查询出市场部下面的所有子部门,但怎么在C#后台调用
district as
(
-- 获得第一个结果集,并更新最终结果集
select * from department where Depart_name= '市场部'
union all
-- 下面的select语句首先会根据从上一个查询结果集中获得的id值来查询parent_id
-- 字段的值,然后district就会变当前的查询结果集,并继续执行下面的select 语句
-- 如果结果集不为null,则与最终的查询结果合并,同时用合并的结果更新最终的查
-- 询结果;否则停止执行。最后district的结果集就是最终结果集。
select a.* from department a, district b
where a.Depar_fatherid = b.Depart_id
)
select * from district这是在SQL2005里面写的一个递归查询,能够查询出市场部下面的所有子部门,但怎么在C#后台调用
解决方案 »
- 新手困惑问题
- 设计一个类,使用该类的应用程序最多只能创建该类的N个对象,这个类应该如何设计?
- 请教:自己打印生成的一维条形码,扫描枪无法识别
- 如何用ExecuteNonQuery执行多条SQL语句?
- 给我介绍一个C#下的打印控制啊.
- 使用dataTimePicker根据时间查找SQLserver数据异常
- WINFORM下的功能
- 如何捕捉listview滚动条事件,最好具体点,如何设置响应消息什么的,我不懂,希望大家帮忙
- $$$$讨论热门流行最吃香月薪高的编成语言$$$$
- 高分请教,WEB FORM中怎样使用ACTIVEX控件(怎样实现通信:即使用方法、事件等)
- vb.net 通信接收不到数据
- WP7开发中WebBrowser控件遇到的一个JS错误问题
4. 树形结构的存储与查询
有用指数:★★★☆☆数据库设计中常常会遇到需要存储树形结构,比如员工关系表、组织结构表,等等。SQL code--测试数据
CREATE TABLE #Employees(
EmployeeCode varchar(20) NOT NULL PRIMARY KEY CLUSTERED,
ReportToCode varchar(20) NULL)
GO
INSERT INTO #Employees VALUES('A',NULL)
INSERT INTO #Employees VALUES('B','A')
INSERT INTO #Employees VALUES('C','A')
INSERT INTO #Employees VALUES('D','A')
INSERT INTO #Employees VALUES('E','B')
INSERT INTO #Employees VALUES('F','B')
INSERT INTO #Employees VALUES('G','C')
INSERT INTO #Employees VALUES('H','D')
INSERT INTO #Employees VALUES('I','D')
INSERT INTO #Employees VALUES('J','D')
INSERT INTO #Employees VALUES('K','J')
INSERT INTO #Employees VALUES('L','J')
INSERT INTO #Employees VALUES('M','J')
INSERT INTO #Employees VALUES('N','K')
GO
/*
可能遇到的查询问题:
1. 员工'D'的所有直接下属
2. 员工'D'的所有2级以内的下属(包括直接下属和直接下属的下属)
3. 员工'N'的所有上级(按报告线顺序列出)
4. 员工@EmployeeCode的所有@LevelDown级以内的下属(@EmployeeCode和@LevelDown以变量传入)
DECLARE @EmployeeCode varchar(20), @LevelDown int;
SET @EmployeeCode = 'D';
SET @LevelDown = 2;
5. 员工@EmployeeCode的所有@LevelUp级以内的上级(@EmployeeCode和@LevelUp以变量传入)
DECLARE @EmployeeCode varchar(20), @LevelUp int;
SET @EmployeeCode = 'N';
SET @LevelUp = 2;
*/
--用递归CTE实现员工树形关系表
WITH CTE AS(
SELECT
EmployeeCode,
ReportToCode,
ReportToDepth = 0,
ReportToPath = CAST('/' + EmployeeCode + '/' AS varchar(200))
FROM #Employees
WHERE ReportToCode IS NULL
UNION ALL
SELECT
e.EmployeeCode,
e.ReportToCode,
ReportToDepth = mgr.ReportToDepth + 1,
ReportToPath = CAST(mgr.ReportToPath + e.EmployeeCode + '/' AS varchar(200))
FROM #Employees e
INNER JOIN CTE mgr
ON e.ReportToCode = mgr.EmployeeCode
)
SELECT * FROM CTE ORDER BY ReportToPath