首页  ·  知识 ·  数据库
Sqlserver2005找出子表树
佚名  http://www.xker.com/  MS-SQL  编辑:dezai  图片来源:网络
同事在准备新老系统的切换,清空一个表的时候往往发现这个表的主键被另一个表用做外键,而系统里有太多层次的引用.所以清起来相当麻烦   用下面这个脚

同事在准备新老系统的切换,清空一个表的时候往往发现这个表的主键被另一个表用做外键,而系统里有太多层次的引用.所以清起来相当麻烦
  用下面这个脚本可以做到找出一个特定表的引用树,比如 table2 有个外键引用到了table1 table3有个外键饮用到了table2 .......

  Code

declare@tbnamenvarchar(256);
set@tbname=N'dbo.aspnet_Applications';
with fkidsas
(
  select 
  object_id(CONSTRAINT_NAME)asFkId,
  object_id(UNIQUE_CONSTRAINT_NAME)ASPkId
  fromINFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
)
,realationsas
(
  selectp.parent_object_idaspktableId
  ,f.parent_object_idasfktableid
  ,i.pkid,i.fkid
  from
  fkidsiinnerjoinsys.objectsponi.pkid=p.[object_id]
  innerjoinsys.objectsfoni.fkid=f.[object_id]
)
,cteas
(
  select *fromrealationswherepktableid=object_id(@tbname)
  unionall
  selectr.*fromctecjoinrealationsr onr.pktableid=c.fktableid
)
select
object_name(pktableid)aspktable
,object_name(fktableid)asfktable
,object_name(pkid)aspk
,object_name(fkid)asfkfromcte 

本文作者:佚名 来源:http://www.xker.com/
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读