Monday, September 24, 2012

Identity the Dependency Child tables of a table

CREATE TABLE #OuptputTable (
	id INT identity(1, 1)
	,PrimaryTable VARCHAR(100)
	,PrimaryKey VARCHAR(100)
	,ChildTable VARCHAR(100)
	,ChildDependentkey VARCHAR(100)
	);

INSERT INTO #OuptputTable
SELECT PrimaryTable
	,PrimaryKey
	,ChildTable
	,ChildDependKey
FROM (
	SELECT OBJECT_ID(A.TABLE_NAME) PrimaryTableID
		,A.TABLE_NAME PrimaryTable
		,B.COLUMN_NAME PrimaryKey
	FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS A
		,INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE B
	WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
		AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
	) P
INNER JOIN (
	SELECT SO.name ChildTable
		,SC.name ChildDependKey
	FROM syscolumns SC
	INNER JOIN sysobjects SO ON (SC.id = SO.id)
	WHERE SO.xtype = 'U'
	) C ON (
		P.PrimaryKey = C.ChildDependKey
		AND P.PrimaryTable <> C.ChildTable
		)
WHERE P.PrimaryTable = 'mandalmaster' --/// here give the table

DECLARE @TotalCount INT
	,@increment INT;
DECLARE @SQL VARCHAR(1000)
	,@SQL1 VARCHAR(1000);

SELECT @TotalCount = COUNT(*)
FROM #OuptputTable;

SET @increment = 0;

DECLARE @ChildColumn VARCHAR(100);
DECLARE @ChildTable VARCHAR(100);

CREATE TABLE #PrimaryTable (Primarytable VARCHAR(1000));

INSERT INTO #PrimaryTable
VALUES (' mandalmaster ') ---here give the table name

WHILE (@increment < @TotalCount)
BEGIN
	SET @increment = @increment + 1

	SELECT @ChildColumn = ChildTable
	FROM #OuptputTable
	WHERE id = @increment;

	SET @ChildTable = 'ChildTable' + CAST(@increment AS VARCHAR)
	SET @SQL = 'ALTER Table #PrimaryTable ADD' + ' ' + @ChildTable + ' Varchar(100)';
	SET @SQL1 = 'Update #PrimaryTable set' + ' ' + @ChildTable + '=''' + @ChildColumn + ''' where ' + @ChildTable + ' IS NULL'

	PRINT @sql1

	IF NOT EXISTS (
			SELECT 1
			FROM tempdb.sys.columns
			WHERE name = @ChildColumn
			)
	BEGIN
		EXEC (@SQL)

		EXEC (@SQL1)
	END
END

SELECT *
FROM #PrimaryTable

DROP TABLE #PrimaryTable

DROP TABLE #OuptputTable

No comments: