--传入Deptid编号
create proc search
@intdeptid int
as
declare @pid int
declare @ntype int
declare @name1 varchar(100) select @pid=nodetype,@ntype=parentid,@name1=deptname from table1 where deptid=@intdeptid
if @pid=0
begin
select dname=@name1
return
end
else
begin
set @intdeptid=@ntype
exec search @intdeptid
end
go
create proc search
@intdeptid int
as
declare @pid int
declare @ntype int
declare @name1 varchar(100) select @pid=nodetype,@ntype=parentid,@name1=deptname from table1 where deptid=@intdeptid
if @pid=0
begin
select dname=@name1
return
end
else
begin
set @intdeptid=@ntype
exec search @intdeptid
end
go
解决方案 »
- 创建触发器时候报错。。一直没找到。。%>_<%求助啊。。。
- 如何使用SQL语句在建立表时给字段添加注释?
- 关于SQL SERVER运行时突然报错的问题???
- 数据库高手进。小白求教
- 怎么写这个存储过程?
- 记录集数据乘积,这样的存储过程怎么写,详情见内,高分在线等
- 有没有介绍sql server自带的存储过程的资料?
- 有没有人在一个操作系统(win2000)下同时安装了sqlserver7.0和sqlserver2000,会不会产生影响?谢谢!
- sql server有没有办法把数据库中的数据保存到一个文本文件中
- sql server 字段 格式设置
- where 子句中的or查询顺序
- 我的数据库中的很多表都被DROP 了,而且又重新CREATE了,不知道有什么方法可以恢复呀
你可以根据你的要求改成存储过程!
[create] table t
(Deptid int,deptname varchar(20),parentid int,nodetype int)insert t values (84,'天府集团',null,0)
insert t values (85,'天府(深圳)分公司',84,0)
insert t values (86,'天府(广州)分公司',84,0)
insert t values (87,'销售部',86,1)
insert t values (88,'市场部',86,1)
insert t values (89,'产品代理商',86,2)
insert t values (90,'经销商',85,2)
insert t values (91,'分销商',89,2)
insert t values (92,'Dept1',84,0)
insert t values (93,'Dept2',92,0)
insert t values (94,'Dept3',93,0)
insert t values (95,'Dept4',94,0)
insert t values (96,'Dept5',95,0)
insert t values (97,'Dept6',96,0)
insert t values (98,'Dept7',97,0)
insert t values (99,'产品代理',84,2)
insert t values (100,'Dept8',98,0)
insert t values (101,'华南区',84,2)
insert t values (102,'华南-1',101,2)
insert t values (103,'华-1',101,2)declare @intdeptid int
set @intdeptid=92
select case when b.nodetype>0 then a.Deptid else b.deptid end
,case when b.nodetype>0 then a.deptname else b.deptname end,
case when b.nodetype>0 then a.parentid else b.parentid end,
case when b.nodetype>0 then a.nodetype else b.nodetype end
from t a,t b where a.deptid=b.parentid and b.deptid=@intdeptiddrop table t
----------- -------------------- ----------- -----------
92 Dept1 84 0(所影响的行数为 1 行)
@intdeptid=103的时候
----------- -------------------- ----------- -----------
101 华南区 84 2(所影响的行数为 1 行)
@intdeptid=85的时候
----------- -------------------- ----------- -----------
85 天府(深圳)分公司 84 0(所影响的行数为 1 行)@intdeptid=88的时候
----------- -------------------- ----------- -----------
86 天府(广州)分公司 84 0(所影响的行数为 1 行)测试了一下,应该符合要求吧!
go
create function fm_f_getfatherid(@id bigint)
returns bigint
--7.得到指定id的父id
--select * from f_getparentid(11)
as
begin
declare @pid bigint
declare @nodetype bigint
declare @nr varchar(800)
select @pid=parentid ,@nodetype=nodetype from t where deptid=@id
if (@nodetype=0)
beginreturn @id
end
if (@nodetype=1 )
begin
while @pid<>0
begin
select @id=@pid select @pid=parentid from t where deptid=@id
end
return(@id)
end
if (@nodetype=2)
begin
select @pid=parentid from t where deptid=@id
end
return @pid
endselect deptname from t where deptid in (select 数据库名.dbo.fm_f_getfatherid(86) from t )
insert t values (105,'华南区bbb',104,4)
insert t values (106,'华南区ccc',105,5)一楼的兄弟不错,牛
insert t values (105,'华南区bbb',104,4)
insert t values (106,'华南区ccc',105,5)lsqkeke的方法简单正确,佩服