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

MSSQL
SQL查询结果集对注入的影响及利用
Access入门:Access的特点及其概念问答
关于SQL注入的几类错误和产生的原理
使用SQL语句取随机数的方法
SQL教程:提高SQL执行效率的几点建议
SQL Server数据库常用的T-SQL命令
实战:全面了解SQLServer注入过程
SQL Server 2000的SA密码被破解实例
union组合结果集时的order问题
MSSQL汉字转拼音函数实现语句
sqlserver 中ntext字段的批量替换(updatetext的用法)
sqlserver 常用存储过程集锦
MSSQL 删除数据库里某个用户所有表里的数据
MSSQL 多字段根据范围求最大值实现方法
MSSQL 首字母替换成大写字母
MSSQL 提取汉字实现语句
sqlserver 字符串分拆 语句
实现按关健字模糊查询,并按匹配度排序的SQL语句
SQLSERVER中union,cube,rollup,cumpute运算符使用说明
sqlserver 禁用触发器和启用触发器的语句

MSSQL 中的 Sql server 2005 找出子表树


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