本文主要介绍了一个获得当前数据库对象依赖关系的实用算法,具体示例请大家参考下文:
以下为引用的内容: 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 |
关键词标签:数据库
相关阅读
热门文章 SqlServer2005对现有数据进行分区具体步骤sql server系统表损坏的解决方法MS-SQL2005服务器登录名、角色、数据库用户Access、SQL Server、Oracle常见应用的区别
人气排行 如何远程备份(还原)SQL2000数据库SQL2000数据库远程导入(导出)数据配置和注册ODBC数据源-odbc数据源配置教程SQL2000和SQL2005数据库服务端口查看或修改SQL Server 2005降级到2000的正确操作步骤修改Sql Server唯一约束教程浅谈JSP JDBC来连接SQL Server 2005的方法SQL Server创建表语句介绍
查看所有0条评论>>