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

MSSQL
实现按部门月卡余额总额分组统计的SQL查询代码
浅议Oracle中的进制转换
sqlserver MSDTC的设置要点
小议主子表INT自增主键插入记录的方法
使用SQLSERVER的扩展存储过程实现远程备份与恢复
SQL安装问题总结
使用XML封装数据库操作语句的实现
SQL Server与Excel数据互导
查询sql遇到deadlock问题的解决
解决sqlsever日志备份错误的方法
关于sql数据库维护失败的问题查找方法
跟日期有关的两条经典SQL语句
使用链接服务器执行远程数据库上的存储过程
select用存储过程返回的表
SQL SERVER与ACCESS、EXCEL的数据转换
榨干MS SQL Server 最后一滴血
SQL Server 2005: 利用新的ranking函数实现高效的数据分页操作
在SQL Server 中使用SQLDMO
SQL Server补丁版本的检查和安装过程中常见问题
SQL高手篇:精妙SQL语句介绍

MSSQL 中的 Sql server 2005 找出子表树


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 67 ::
收藏到网摘: 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