| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1224 人关注过本帖
标题:这个遍历问题我不会!
只看楼主 加入收藏
water123456
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:3208
专家分:5
注 册:2006-2-21
收藏
 问题点数:0 回复次数:20 
这个遍历问题我不会!

dept_ID 部门ID号 唯一标识
gradeID 部门级别 1代表一级部门,2代表二级部门...
deptNA 部门名称 部门名称
homedeptID 上级部门ID号 标识所归属部门

dept_ID gradeID deptNA homedeptID
2 1 董事会 1
3 1 顶级部门 2
4 2 市场部 2
5 2 技术部 2
6 2 办公室 2
7 3 技术1部 5
8 3 技术2部 5
9 3 技术3部 5
10 3 市场1部 4
11 3 市场2部 4
..............
假设我的“技术1部”下面还有下设机构,而且下设机构下还有多少“小部门”都不确定。
有什么办法?可以让我把上层机构一删除,下面的子部全部删除吗??
如“我把技术部删除,通过SQL语句也可把技术1.2.3部,及下面多少不确定的部门,全部删除吗?”
怎么样用程序可以解决这个问题,谢谢啦!

搜索更多相关主题的帖子: 技术部 标识 市场部 董事会 
2006-08-02 09:43
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
你这个东西应该有几个表关联在一起的,你找出几个表的关系就可以删除了,就算你用程序来实现,一样要执行SQL语句

c++/C + 汇编 = 天下无敌
2006-08-02 12:30
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
你这几个表应该用一些键来关联起来,那就可以通过键来查造,然后delete

c++/C + 汇编 = 天下无敌
2006-08-02 12:33
water123456
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:3208
专家分:5
注 册:2006-2-21
收藏
得分:0 
dept_ID gradeID deptNA homedeptID
2 1 董事会 1
3 1 顶级部门 2
4 2 市场部 2
5 2 技术部 2
6 2 办公室 2
7 3 技术1部 5
8 3 技术2部 5
9 3 技术3部 5
10 3 市场1部 4
11 3 市场2部 4
..............
我的第一个和第四个有关系,第四个的代码说明它的上级部门.只有这一张表.
你看见我的5了吗?关系就是这,应该怎么做呀?能给一点代码看看吗?
谢谢,请高手指点!

让我们风风火火的过一生,别平平淡淡过一年。
2006-08-03 08:56
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
如果你是用程序来控制的,那你必须要执行两次sql语句,先删除homedeptID的 5,然后再删除 deptID 的5, 否则,你就要创建触发器

c++/C + 汇编 = 天下无敌
2006-08-03 14:38
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
delete from Test where Test.dept_ID = 5

CREATE TRIGGER trig1
on Test
FOR DELETE
AS
   delete from Test2 where homedeptID.NO=5

你可以这样,首先用程序判断做一个标记,看看是否存在触发器,如果存在,就DROP TGRIGGER trig1.
然后用 string str;
str.Format("CREATE TRIGGER trig1 on Test FOR DELETE AS delete from Test2 where homedeptID.NO='%s'",XXXX);

c++/C + 汇编 = 天下无敌
2006-08-03 14:53
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
当你执行 delete from Test where Test.dept_ID = 5的时候,由于存在触发器,Test2的内容都会删除.哈哈.

c++/C + 汇编 = 天下无敌
2006-08-03 14:54
water123456
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:3208
专家分:5
注 册:2006-2-21
收藏
得分:0 
delete from Test where Test.dept_ID = 5
CREATE TRIGGER trig1
on Test
FOR DELETE
AS
delete from Test2 where homedeptID.NO=5

你这样太固定了吧,要是我"技术1部.技术2部.技术3部."下面还有下级部门的话,那样可以你的这种方法,是不是可能就行了?

让我们风风火火的过一生,别平平淡淡过一年。
2006-08-03 17:34
water123456
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:3208
专家分:5
注 册:2006-2-21
收藏
得分:0 
delete from Test where Test.dept_ID = 5
CREATE TRIGGER trig1
on Test
FOR DELETE
AS
delete from Test2 where homedeptID.NO=5
要是这个5能变成活的,那就好啦,谢谢版主的回答
可以不可以用程序来控制的吗?
能写一点原代码,那就更好啦,谢谢,版主的回答.

让我们风风火火的过一生,别平平淡淡过一年。
2006-08-03 17:41
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
这个估计要活动的话肯能要用存储过程了,存储过程不知道可不可以跟触发器一起用,等等,你是的斑竹吧,应该对SQL有一定的造诣..我那个固定的原因是方便在SQL上用的,实际上你用ADO来对数据库操作的,估计你是用C#的,那样的话C#有字符串类型有format的功能,用法跟 printf一样的,
str.Format("CREATE TRIGGER trig1 on Test FOR DELETE AS delete from Test2 where homedeptID.NO='%s'",XXXX);
这样就可以灵活替代5不过同样要程序控制.
可能真是要用到存储过程了,要定义变量的

c++/C + 汇编 = 天下无敌
2006-08-03 18:53
快速回复:这个遍历问题我不会!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021372 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved