sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan genereres scripts for at genskabe fremmednøglebegrænsninger i SQL Server-databasen - SQL Server / TSQL vejledning del 73

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

  1. Hvordan kan jeg kalde en SQL Stored Procedure ved hjælp af EntityFramework 7 og Asp.Net 5

  2. Sådan formateres SQLite-resultater som en tabel

  3. Hvad er SQL-operatører, og hvordan fungerer de?

  4. Hvordan får man de afgrænsningskoordinater for et amerikansk postnummer?