Set NoCount on
Declare @FK_Table Varchar(100)
Declare @PK_Table Varchar(100)
Declare @FK_Constraint Varchar(100)
Declare @FK_Cnt int
Declare @FK_Columns Varchar(max)
Declare @PK_Columns Varchar(max)
Declare @Query varchar(max)
Declare @FK_Cursor Cursor
Select * Into Test_FroeignKey From
(Select
Name As Constraint_Name,OBJECT_NAME(A.parent_object_id) Foreign_Table,
OBJECT_NAME(A.referenced_object_id ) Primary_Table,
COL_NAME (B.parent_object_id,parent_column_id ) As Foreign_Key,
COL_NAME(B.referenced_object_id ,referenced_column_id) As Primary_Key
From sys.foreign_keys A Inner join sys.foreign_key_columns B
On A.object_id =B.constraint_object_id where A.name Like'%ConstraintName%'
)AA
Set @FK_Cursor = Cursor For Select Distinct Constraint_Name From Test_FroeignKey
Open @FK_Cursor
Fetch Next From @FK_Cursor Into @FK_Constraint
--Drop the foreign keys
While @@FETCH_STATUS =0
Begin
Select @FK_Table= Max(Foreign_Table) From Test_FroeignKey
Where Constraint_Name in(
Select Distinct Constraint_Name
From
(Select Name As Constraint_Name
From sys.foreign_keys A
Inner join sys.foreign_key_columns B
On A.object_id =B.constraint_object_id
Where A.name Like'%ConstraintName%'
)AA
) And Constraint_Name =@FK_Constraint
Set @Query = 'Alter Table Test.dbo.'+@FK_Table+' Drop '+ @FK_Constraint
Exec (@Query)
Fetch Next From @FK_Cursor Into @FK_Constraint
End
Close @FK_Cursor
---Truncate Tables-------
Truncate Table Test.dbo.Tablename
Open @FK_Cursor
Fetch Next From @FK_Cursor Into @FK_Constraint
While @@FETCH_STATUS =0
Begin
Select @FK_Cnt=COUNT(*) From Test_FroeignKey Where Constraint_Name =@FK_Constraint
If @FK_Cnt =1
Begin
Select
@FK_Table= Foreign_Table,@FK_Columns=Foreign_Key,
@PK_Table = Primary_Table,@PK_Columns =Primary_Key
From Test_FroeignKey
Where Constraint_Name Not In(
Select Distinct Constraint_Name
From (
Select Name As Constraint_Name
From sys.foreign_keys A
Inner join sys.foreign_key_columns B
On A.object_id = B.constraint_object_id
Where A.name Like'%ConstraintName%'
)AA
) And Constraint_Name = @FK_Constraint
Set @Query = 'Alter Table Test.dbo.'+ @FK_Table +
' ADD CONSTRAINT '+ @FK_Constraint+' FOREIGN KEY('+ @FK_Columns +
')REFERENCES Test.dbo.'+@PK_Table+'('+ @PK_Columns +')'
Exec (@Query)
End
Else
Begin
Set @FK_Columns = Stuff((Select ', ' + Convert(Varchar(100),Foreign_Key)
From
(Select Foreign_Key From Test_FroeignKey
Where Constraint_Name =@FK_Constraint
)X
FOR XML PATH('')
),1,2,'')
Set @PK_Columns = Stuff((Select ', ' + Convert(Varchar(100),Primary_Key)
From
(Select Primary_Key From Test_FroeignKey
Where Constraint_Name =@FK_Constraint
)X
FOR XML PATH('')
),1,2,'')
Select
@FK_Table = Max(Foreign_Table),
@PK_Table = Max(Primary_Table)
From Test_FroeignKey
Where Constraint_Name Not In(
Select Distinct Constraint_Name
From (
Select Name As Constraint_Name
From sys.foreign_keys A
Inner join sys.foreign_key_columns B
On A.object_id = B.constraint_object_id
Where A.name Like'%ConstraintName%'
)AA
) And Constraint_Name = @FK_Constraint
Set @Query = 'Alter Table Test.dbo.'+ @FK_Table +
' ADD CONSTRAINT '+ @FK_Constraint+' FOREIGN KEY('+ @FK_Columns +
')REFERENCES Test.dbo.'+@PK_Table+'('+ @PK_Columns +')'
Exec (@Query)
End
Fetch Next From @FK_Cursor Into @FK_Constraint
End
Close @FK_Cursor
Deallocate @FK_Cursor
Drop Table Test_FroeignKey
No comments:
Post a Comment