您的位置:首页 > 其它

得到对象调用的其他对象,显示为树形结构

2007-05-26 16:47 477 查看
create proc p_e_get_object_ordinal @object_name varchar(50)
as
/*
描述:
得到对象(函数、存储过程、视图)调用的对象列表,显示为树形结构
版本:
时间 修改人 操作
2007年2月23日 mengmou 创建
输入参数:
@object_name 对象名称
返回:
object 对象名称
涉及:
sysobjects
syscomments
变量:
@level 层次
@tmp_ordinal 保存树形结构
临时表:

*/
begin
set nocount on
set xact_abort on

if not exists(select 1 from sysobjects where name = @object_name and type in('FN','IF','P','TF','V'))
begin
select '对象不存在!' as object
return
end

declare @level int set @level = 0
declare @tmp_ordinal table (id int identity(1,1),obj_name varchar(50),parent_name varchar(50),sid varchar(7900))
insert @tmp_ordinal(obj_name,parent_name,sid) select @object_name,null,'01'

while @@rowcount > 0
begin
update _t
set _t.sid = _t1.sid + right(100+_t.id,2)
from @tmp_ordinal _t
join @tmp_ordinal _t1 on _t1.obj_name = _t.parent_name
where _t.sid is null

set @level = @level + 1

insert @tmp_ordinal
select distinct object_name(_d.depid),_o.obj_name,null
from @tmp_ordinal _o
join sysdepends _d on _d.id = object_id(_o.obj_name)
where len(_o.sid) = @level*2
end

select space((len(sid)/2-1)*4)+obj_name as object,_o.xtype
from @tmp_ordinal _t
join sysobjects _o on _o.name = _t.obj_name
order by sid
end

go
create proc p_a
as
begin
select 1
end
go
create proc p_b
as
begin
exec p_a
end
go
create proc p_c
as
begin
exec p_b
exec p_a
end
go
exec p_e_get_object_ordinal 'p_c'
go
drop proc p_e_get_object_ordinal,p_a,p_b,p_c
/*
object xtype
------------- -------
p_c P
p_a P
p_b P
p_a P
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: