·天新网首页·加入收藏·设为首页·网站导航
数码笔记本手机摄像机相机MP3MP4GPS
硬件台式机网络服务器主板CPU硬盘显卡
办公投影打印传真
家电电视影院空调
游戏网游单机动漫
汽车新车购车试驾
下载驱动源码
学院开发域名
考试公务员高考考研
业界互联网通信探索
获得当前数据库对象依赖关系的实用算法
http://www.Q.cc 2008年01月03日 赛迪网 13301

本文主要介绍了一个获得当前数据库对象依赖关系的实用算法,具体示例请大家参考下文:

create   function   udf_GenLevelPath()   
  returns   @v_Result   table   (LevelPath   int,OName   sysname)   
  /****************************************************************/   
  /* 功能描述:按照依赖关系,列出数据库对象 */   
  /* 输入参数:无 */   
  /* 输出参数:按照依赖关系排列的数据库对象表,无依赖在前 */   
  /* 编写: anna*/   
  /* 时间:2007-12-12 */   
  /****************************************************************/   
  as   
  begin   
  declare   @vt_ObjDepPath   table   (LevelPath   int,OName   sysname   null)   
  declare   @vt_Temp1   table   (OName   sysname   null)   
  declare   @vt_Temp2   table   (OName   sysname   null)   
  --依赖的级别,值越小依赖性越强   
  declare   @vi_LevelPath   int   
    
  set   @vi_LevelPath   =   1   
  --得到所有对象,不包括系统对象           
  insert   into   @vt_ObjDepPath(LevelPath,OName)   
  select   @vi_LevelPath,o.name   
  from   sysobjects   o   
  where   xtype   not   in   ('S','X')   
    
  --得到依赖对象的名称   
  insert   into   @vt_Temp1(OName)   
  select   distinct   object_name(sysdepends.depid)     
  from   sysdepends,@vt_ObjDepPath   p   
  where   sysdepends.id   <>   sysdepends.depid   
  and   p.OName   =   object_name(sysdepends.id)   
    
  --循环处理:由对象而得到其依赖对象   
  while   (select   count(*)   from   @vt_Temp1)   >   0   
  begin   
  set   @vi_LevelPath   =   @vi_LevelPath   +   1   
    
  update   @vt_ObjDepPath   
  set   LevelPath   =   @vi_LevelPath   
  where   OName   in   (select   OName   from   @vt_Temp1)   
  and   LevelPath   =   @vi_LevelPath   -   1   
    
  delete   from   @vt_Temp2   
    
  insert   into   @vt_Temp2   
  select   *   from   @vt_Temp1   
    
  delete   from   @vt_Temp1   
    
  insert   into   @vt_Temp1(OName)   
  select   distinct   object_name(sysdepends.depid)     
  from   sysdepends,@vt_Temp2   t2   
  where   t2.OName   =   object_name(sysdepends.id)   
  and   sysdepends.id   <>   sysdepends.depid   
    
  end   
    
  select   @vi_LevelPath   =   max(LevelPath)   from   @vt_ObjDepPath   
    
  --修改没有依赖对象的对象级别为最大   
  update   @vt_ObjDepPath   
  set   LevelPath   =   @vi_LevelPath   +   1   
  where   OName   not   in   (select   distinct   
object_name(sysdepends.id)   from   sysdepends)   
  and   LevelPath   =   1   
    
  insert   into   @v_Result   
  select   *   from   @vt_ObjDepPath   order   by   LevelPath   desc   
  return   
  end   
  go   
    
  --调用方法   
  select   *   from   dbo.udf_GenLevelPath()   
  go

上一篇: 实例讲解查询去除指定字段值相同的记录
下一篇: 如何使用"SMO"连接到SQL Server实例

关于我们 | 联系我们 | 加入我们 | 广告服务 | 投诉意见 | 网站导航
Copyright © 2000-2009 www.Q.cc, All Rights Reserved.
晨新科技 版权所有 Created by TXSite.net