Sql server 2005 找出子表树

本文提供了一个SQL脚本,能够帮助查找数据库中特定表的所有外键依赖关系,并构建出完整的引用树,便于进行系统更新或数据清理等工作。

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

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

 

 

 

ContractedBlock.gifExpandedBlockStart.gifCode
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  


 

 

 

转载于:https://www.cnblogs.com/Tianjon/archive/2008/11/18/1336298.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值