Run the script against your server, Please be careful while running the script on prodcution servers.
Run the script against your server, Please be careful while running the script on prodcution servers.
/*Generate #temp table with constraints information
Author: AG*/
--drop table #FkeyDesc
USE <DBName>
GO
SET NOCOUNT ON
GO
;WITH cte (
consColumn
,foreignKeyName
,parentSchema
,parentTableName
,parentColName
,refSchema
,refTableName
,refColName
)
AS (
SELECT fkc.constraint_column_id AS consColumn
,fk.name AS foreignKeyName
,parentSchema .name AS parentSchema
,parentTable.name AS parentTableName
,parent_col.name AS parentColname
,refSchema.name as refSchema
,refTable.name AS refTablename
,ref_col.name AS refColName
--select *
FROM sys.foreign_keys fk
INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
INNER JOIN sys.tables parentTable ON parentTable.object_id = fkc.parent_object_id
INNER JOIN sys.schemas parentSchema ON parentSchema .schema_id=parentTable .schema_id
INNER JOIN sys.columns parent_col ON fkc.parent_column_id = parent_col.column_id
AND parent_col.object_id = parentTable.object_id
INNER JOIN sys.tables refTable ON refTable.object_id = fkc.referenced_object_id
INNER JOIN sys.schemas refSchema ON refSchema .schema_id =refTable .schema_id
INNER JOIN sys.columns ref_col ON fkc.referenced_column_id = ref_col.column_id
AND ref_col.object_id = refTable.object_id
AND parentTable.type='U'
AND refTable.type='U'
--AND parentTable.schema_id =schema_id('CUBE')
--AND refTable.schema_id =schema_id('CUBE')
--AND parentTable.name='luExitReason'
-- AND refTable.name='luExitReason' --like 'DIM!_%' ESCAPE'!' OR refTable.name like 'FCT!_%' ESCAPE'!')
)
SELECT DISTINCT foreignKeyName
,parentSchema
,parentTableName
,SUBSTRING((
SELECT ',' + a.parentColName + ''
FROM cte a
WHERE a.foreignKeyName = c.foreignKeyName
ORDER BY a.consColumn
FOR XML PATH('')
), 2, 200000) AS parentColName
,refSchema
,refTableName
,SUBSTRING((
SELECT ',' + b.refColName + ''
FROM cte b
WHERE b.foreignKeyName = c.foreignKeyName
ORDER BY b.consColumn
FOR XML PATH('')
), 2, 200000) AS refColName
INTO #FkeyDesc
FROM cte c
--Dropping foreign key constraints.
SELECT DISTINCT 'IF EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N''['+parentSchema+'].[' + foreignKeyName + ']'')
AND parent_object_id = OBJECT_ID(N''['+parentSchema+'].[' + parentTableName + ']''))
ALTER TABLE ['+parentSchema+'].[' + parentTableName + '] DROP CONSTRAINT [' + foreignKeyName + ']' AS foreignKey_drop_script
FROM #FkeyDesc
--Creating foreign key constraints.
SELECT DISTINCT 'ALTER TABLE ['+parentSchema +'].[' + parentTableName + '] WITH CHECK
ADD CONSTRAINT [' + foreignKeyName + '] FOREIGN KEY(' + parentColName + ')
REFERENCES ['+refSchema+'].[' + refTableName + '](' + refColName + ')' AS Add_constraints_script
FROM #FkeyDesc
GO
/* Below is the example table
drop table Parent_Table
drop table child_table
drop table Parent_Table1
drop table child_table1
Create table Parent_Table(id int , name varchar(40),sal float constraint prk primary key (id,name) )
create table child_table(id int ,name varchar(40),dept int ,constraint frk foreign key (id,name) references Parent_Table(id,name))
;
CREATE TABLE Parent_Table1 (
id INT
,NAME VARCHAR(40)
,sal FLOAT CONSTRAINT prk1 PRIMARY KEY (
id
,NAME
,sal
)
)
CREATE TABLE child_table1 (
id INT
,NAME VARCHAR(40)
,sal FLOAT
,dept INT
,CONSTRAINT frk1 FOREIGN KEY (
id
,NAME
,sal
) REFERENCES Parent_Table1(id, NAME, sal)
);
*/