the below query gives you reverse relationship starting from child nad moving up to parent tables based on fk relationships set. use this to delete the records starting from child tables upto root level.;with object_cte(tblid,tblname,rtblid,rtblname,level)as(select distinct o.object_id as tblid,OBJECT_NAME(o.object_id) as tblname,cast(null as int),cast(null as sysname),0 as levelfrom sys.objects oinner join sys.foreign_keys fon f.parent_object_id = o.object_idwhere o.is_ms_shipped=0and o.type='u'union allselect t.object_id as tblid,OBJECT_NAME(t.object_id) as tblname,o.tblid,o.tblname,o.level + 1from object_cte oinner join sys.foreign_keys fon f.parent_object_id = o.tblidjoin sys.objects ton t.object_id = f.referenced_object_idwhere t.is_ms_shipped=0and t.type='u')select * from(select row_Number() over (partition by tblname order by level) as rn,* from object_cte )twhere rn=1order by level
------------------------------------------------------------------------------------------------------SQL Server MVPhttp://visakhm.blogspot.com/