mengmou

知道要做什么,知道要怎样做,知道要怎样学习。

用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
mengmou的公告
文章分类
    存档

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

    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
    */
     

    发表于 @ 2007年05月26日 16:47:00 | 评论( loading... ) | 编辑| 举报| 收藏

    旧一篇:在并发事务中加锁的示例代码 | 新一篇:自动清空数据库中的数据

    • 发表评论
    • 评论内容:
    •  
    Copyright © mengmou
    Powered by CSDN Blog