Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara membuat skrip untuk membuat Ulang Batasan Kunci Asing di Database SQL Server - Tutorial SQL Server / TSQL Bagian 73

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengaruh petunjuk NOLOCK dalam pernyataan SELECT

  2. Hapus Pesan Email Database dari Database msdb di SQL Server (T-SQL)

  3. Simulasi CONNECT SEBELUMNYA dari Oracle di SQL Server

  4. Ganti String dengan String lain di SQL Server (T-SQL)

  5. DATETIMEOFFSETFROMPARTS() Contoh di SQL Server (T-SQL)