I have ran into a situation where i will have to delete all the records of the child table and then the records of parent table and i was able to write a query to get the column,table both for parent,child and stuck up in deleting them using query and
i will not be able to use Cascade...My validation criteria is applicable for the child tables and parent table...am trying to compare last modified date of each table...Kindly help me with an approach
DECLARE @mytable VARCHAR(30) SET @mytable = 'tablea' DECLARE @Order INT SET @Order = 0 DECLARE @Count INT declare @tblname varchar(100),@query NVARCHAR(max),@parent varchar(100) if OBJECT_ID('tempdb..#OrderList','U') is not null DROP TABLE #OrderList if OBJECT_ID('tempdb..#temp','U') is not null DROP TABLE #temp CREATE TABLE #TEMP ( OrderNo INT, TableName VARCHAR(50), tid varchar(100), childtable varchar(100), cid varchar(100) ) CREATE TABLE #OrderList ( RecordNo INT, OrderNo INT, TableName VARCHAR(50), tid varchar(100), childtable varchar(100), cid varchar(100) ) create table #t ( taname varchar(100) ) ;with tempcte (level,parent,pcol,child,ccol) as ( SELECT 0,SO2.name, SC2.name,SO1.name, SC1.name FROM dbo.sysforeignkeys FK INNER JOIN dbo.syscolumns SC1 ON FK.fkeyid = SC1.id AND FK.fkey = SC1.colid INNER JOIN dbo.syscolumns SC2 ON FK.rkeyid = SC2.id AND FK.rkey = SC2.colid INNER JOIN dbo.sysobjects SO1 ON FK.fkeyid = SO1.id INNER JOIN dbo.sysobjects SO2 ON FK.rkeyid = SO2.id INNER JOIN dbo.sysobjects FO ON FK.constid = FO.id WHERE SO2.Name = 'tablea' union all SELECT level+1,SO2.name, SC2.name,SO1.name, SC1.name FROM dbo.sysforeignkeys FK INNER JOIN dbo.syscolumns SC1 ON FK.fkeyid = SC1.id AND FK.fkey = SC1.colid INNER JOIN dbo.syscolumns SC2 ON FK.rkeyid = SC2.id AND FK.rkey = SC2.colid INNER JOIN dbo.sysobjects SO1 ON FK.fkeyid = SO1.id INNER JOIN dbo.sysobjects SO2 ON FK.rkeyid = SO2.id INNER JOIN dbo.sysobjects FO ON FK.constid = FO.id inner join tempcte t on SO2.Name = t.child ) insert into #TEMP ( OrderNo, TableName, tid, childtable, cid ) select level,parent,pcol,child,ccol from tempcte select * from #TEMP INSERT INTO #OrderList SELECT Row_number() OVER (ORDER BY OrderNo, TableName), #TEMP.OrderNo, #TEMP.TableName, #TEMP.tid, #temp.childtable, #TEMP.cid FROM #TEMP SET @Count = (SELECT Max(RecordNo) FROM #OrderList) select * from #OrderList