insert to _newtable_ from _oldtable_works nicely. But to recopy into the orignal tables seems to be tricky, due to identity, foreign keys etc.
>USE YourDataBase > > >-- Get ALL contraints from the datatbase >-- Keep in mind that this NOT deal with triggers >DECLARE @Test TABLE (Id int IDENTITY(1,1), > Constraint_Name nvarchar(max), > FK_table nvarchar(200), > FK_Column nvarchar(200), > PK_Table nvarchar(200), > PK_Column nvarchar(200), > DELETE_RULE nvarchar(200), > UPDATE_RULE nvarchar(200), > IsNotForReplication bit) > > >INSERT INTO @Test (Constraint_Name, > FK_table , > FK_Column , > PK_Table , > PK_Column , > DELETE_RULE , > UPDATE_RULE , > IsNotForReplication) >SELECT fk.name AS Constraint_Name, > OBJECT_NAME(fk.parent_object_id) AS FK_table, > c1.name AS FK_Column, > OBJECT_NAME(fk.referenced_object_id) AS PK_Table, > c2.name AS PK_Column, > CASE > WHEN fk.delete_referential_action_desc = 'NO_ACTION' > THEN '' > ELSE fk.delete_referential_action_desc END AS DELETE_RULE , > CASE > WHEN fk.update_referential_action_desc = 'NO_ACTION' > THEN '' > ELSE fk.update_referential_action_desc END AS UPDATE_RULE, > Is_Not_For_Replication >FROM sys.foreign_keys fk >INNER JOIN sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id >INNER JOIN sys.columns c1 ON fkc.parent_column_id = c1.column_id AND fkc.parent_object_id = c1.object_id >INNER JOIN sys.columns c2 ON fkc.referenced_column_id = c2.column_id AND fkc.referenced_object_id = c2.object_id >WHERE is_ms_shipped = 0 >ORDER BY fk.name > >DECLARE @sql nvarchar(max) >SET @sql = '' > > >SELECT @sql = @sql + 'ALTER TABLE '+ FK_Table+' DROP CONSTRAINT '+Constraint_Name+CHAR(13)+CHAR(10) >FROM @Test > >--- EXEC sp_executesql @sql -- Uncomment this to remove all contraints >print @sql > >--- Do whatever you wan to do with your tables > >-- Let's get constraints back >DECLARE @lcFk nvarchar(max), > @lcFKFields nvarchar(max), > @lcPKFields nvarchar(max), > @lcPKTable nvarchar(max), > @lcFKTable nvarchar(max), > @lcUpdateRule nvarchar(max), > @lcDeleteRule nvarchar(max), > @IsNotForReplication bit, > @Id int > >SELECT @Id = MIN(Id) FROM @Test >print @Id > >SET @sql = '' >WHILE @Id IS NOT NULL > BEGIN > > SELECT @lcFk = Constraint_Name, > @lcPKTable = PK_Table, > @lcFKTable = FK_Table, > @lcUpdateRule = UPDATE_RULE, > @lcDeleteRule = DELETE_RULE, > @IsNotForReplication = IsNotForReplication > FROM @Test > WHERE Id = @Id > > SET @lcFKFields = null > SET @lcPKFields = null > > SELECT @lcFKFields = ISNULL(@lcFKFields+',','') + FK_Column, > @lcPKFields = ISNULL(@lcPKFields+',','') + PK_Column > FROM @Test > WHERE Constraint_Name = @lcFk > > SET @sql = @sql + 'ALTER TABLE '+@lcFKTable+' WITH NOCHECK ADD CONSTRAINT '+ @lcFk+ ' FOREIGN KEY ('+ @lcFKFields+ > ') REFERENCES '+ @lcPKTable + '(' + @lcPKFields +')' > IF @lcUpdateRule <> '' > SET @sql = @sql + ' ON UPDATE '+@lcUpdateRule > > IF @lcDeleteRule <> '' > SET @sql = @sql + ' ON DELETE '+@lcDeleteRule > > IF @IsNotForReplication = 1 > SET @sql = @sql + ' NOT FOR REPLICATION'+CHAR(13)+CHAR(10) > > SET @Id = (SELECT MIN(Id) FROM @Test WHERE Id > @id AND Constraint_Name <> @lcFk) > END > >--- EXEC sp_executesql @sql -- Uncomment this to bring back all contraints >SELECT @sql >>TEST this script very well before put it in production!!!!