当前位置: 首页 > 图文教程 > 数据库 > MSSQL > Sql server 2005 找出子表树

MSSQL
SQL Server 2005返回刚刚插入的数据条目id值
SQL Server 2000的视图中必须小心使用*符号
SQL Server 2005 SSIS技巧:动态目的文件名
SQL 2005 sa islock用户不能正常登录的现象
讲解无法打开用户默认数据库的解决方法
SQL Server中如何快速获取表的记录总数
SQL Server数据库简体繁体数据混用的问题
讲解SQL Server海量数据导入的最快方法
通向MySQL神秘王国的图形化之路
如何配置一个安全稳定的SQL Server数据库
SQL Server取得网站路径的几种方法及比较
一些文档中没有介绍的SQL Server DBCC命令
讲解SQL Server危险扩展存储删除和恢复
详细讲解删除SQL Server日志的具体方法
SQL查询效率:100w数据查询只需要1秒钟
SQL Server中多行多列连接成为单行单列
SQL Server 2000数据库FOR XML查询概述
带你深入了解数据库设计中的英文术语表
实例讲解实现SQL下的字符串拆分具体方法
通过作业调度建立SQL Server的自动备份

MSSQL 中的 Sql server 2005 找出子表树


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 89 ::
收藏到网摘: n/a

同事在准备新老系统的切换,清空一个表的时候往往发现这个表的主键被另一个表用做外键,而系统里有太多层次的引用.所以清起来相当麻烦

用下面这个脚本可以做到找出一个特定表的引用树,比如 table2 有个外键引用到了table1  table3有个外键饮用到了table2  .......

以下为引用的内容:

Code
declare @tbname nvarchar(256);
set @tbname=N'dbo.aspnet_Applications';

with  fkids as
(
    select 
    object_id(CONSTRAINT_NAME) as FkId,
    object_id(UNIQUE_CONSTRAINT_NAME) AS PkId
    from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
)
,realations as
(
    select p.parent_object_id as pktableId
    ,f.parent_object_id as fktableid
    ,i.pkid,i.fkid
    from
    fkids i inner join sys.objects p on i.pkid=p.[object_id]
    inner join sys.objects f on i.fkid=f.[object_id]
 
)
,cte as
(
    select  * from realations where pktableid=object_id(@tbname)
    union all
    select r.* from cte c join realations r  on r.pktableid=c.fktableid
)

select
object_name(pktableid) as pktable
,object_name(fktableid) as fktable
,object_name(pkid) as pk
,object_name(fkid) as fk from cte