Quantcast
Channel: Forum Getting started with SQL Server
Viewing all articles
Browse latest Browse all 7129

Deleting records from child to parent table

$
0
0
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


Viewing all articles
Browse latest Browse all 7129

Trending Articles