Scenarie:
Du skal afkorte alle tabellerne i SQL Server-databasen, når du kører truncate-sætning, får du fejl under fejlen.Besked 4712, niveau 16, tilstand 1, linje 43
Kan ikke afkorte tabellen 'SchemaName. TableName', fordi det refereres til af en FOREIGN KEY-restriktion.
Den nemme måde ville være at droppe Foreign Key Constraints, afkorte tabellerne og genskabe Foreign Key Constraints igen.
Jeg skrev et indlæg, som du kan bruge til at generere Drop Foreign Key Constraints i en database. Klik her.
Men før vi dropper dem, skal vi generere scripts til oprettelse af fremmednøglebegrænsninger, så vi kan køre efter afkortning af tabellen.
Du kan bruge nedenstående script til at generere afkortningstabelsætning for alle brugertabeller fra en database.
Select 'Truncate table '+'[' +Schema_name(Schema_id) +'].['+name+']' as TruncateTablesScript from sys.tables where is_ms_shipped=0
Nedenstående script kan bruges til at genskabe Foreign Key Constraint i en database.
;With CTE_FK AS ( SELECT Schema_Name(Schema_id) as TableSchemaName, object_name(FK.parent_object_id) ParentTableName, object_name(FK.referenced_object_id) ReferenceTableName, FK.name AS ForeignKeyConstraintName,c.name as RefColumnName, cf.name as ParentColumnList FROM sys.foreign_keys AS FK INNER JOIN sys.foreign_key_columns AS FKC ON FK.OBJECT_ID = FKC.constraint_object_id INNER JOIN sys.columns c on c.OBJECT_ID = FKC.referenced_object_id AND c.column_id = FKC.referenced_column_id INNER JOIN sys.columns cf on cf.OBJECT_ID = FKC.parent_object_id AND cf.column_id = FKC.parent_column_id where fk.is_ms_shipped=0 ) Select 'Alter table ['+TableSchemaName+'].['+ParentTableName+']' +' Add Constraint '+ForeignKeyConstraintName+ ' Foreign Key('+stuff(( Select ','+ParentColumnList from CTE_FK i where i.ForeignKeyConstraintName=o.ForeignKeyConstraintName and i.TableSchemaName=o.TableSchemaName and i.ParentTableName=o.ParentTableName and i.ReferenceTableName=o.ReferenceTableName for xml path('')), 1, 1, '')+') References '+ '['+TableSchemaName+'].['+ReferenceTableName+']('+stuff(( Select ','+RefColumnName from CTE_FK i where i.ForeignKeyConstraintName=o.ForeignKeyConstraintName and i.TableSchemaName=o.TableSchemaName and i.ParentTableName=o.ParentTableName and i.ReferenceTableName=o.ReferenceTableName for xml path('')), 1, 1, '')+')' AS CreateForeignKeyConstraintScript, ParentTableName, ReferenceTableName, ForeignKeyConstraintName from CTE_FK o group by tableSchemaName, ParentTableName, ReferenceTableName, ForeignKeyConstraintName
Sådan genereres script for at genskabe Foreign Key Constraint i SQL Server-database |
Tag resultaterne fra CreateForeignKeyConstraintScript Column. Jeg foreslår, at du kører scripts i DEV eller QA først for at sikre, at alt fungerer fint, før du kører i produktion.
Videodemo :Sådan opretter du generere scripts til at genskabe fremmede nøglebegrænsninger i SQL Server