Skenario:
Anda perlu memotong semua tabel dalam database SQL Server, ketika Anda menjalankan pernyataan terpotong, Anda mendapatkan kesalahan di bawah ini.Msg 4712, Level 16, Status 1, Baris 43
Tidak dapat memotong tabel 'SchemaName. TableName' karena direferensikan oleh batasan FOREIGN KEY.
Cara mudahnya adalah dengan menghapus Batasan Kunci Asing, memotong tabel, dan membuat kembali Batasan Kunci Asing.
Saya menulis posting yang dapat Anda gunakan untuk menghasilkan Drop Foreign Key Constraints dalam database. Klik disini.
Tetapi sebelum kita menghapusnya, kita perlu membuat skrip Buat Batasan Kunci Asing agar kita dapat menjalankannya setelah memotong tabel.
Anda dapat menggunakan skrip di bawah ini untuk membuat pernyataan tabel terpotong untuk semua tabel pengguna dari database.
Select 'Truncate table '+'[' +Schema_name(Schema_id) +'].['+name+']' as TruncateTablesScript from sys.tables where is_ms_shipped=0
Script di bawah ini dapat digunakan untuk membuat ulang Batasan Kunci Asing dalam 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
Cara membuat skrip untuk membuat kembali Batasan Kunci Asing di Database SQL Server |
Ambil hasil dari Kolom CreateForeignKeyConstraintScript. Saya menyarankan Anda untuk menjalankan skrip di DEV atau QA terlebih dahulu untuk memastikan semua berfungsi dengan baik sebelum Anda menjalankan di Produksi.
Video Demo :Cara membuat generate skrip untuk membuat ulang Batasan Kunci asing di SQL Server