Skenario:
Anda perlu memotong tabel tetapi ketika Anda mencoba menjalankan nama tabel terpotong. Anda mendapatkan kesalahan di bawah ini.Msg 4712, Level 16, State 1, Line 43
Tidak dapat memotong tabel 'SchemaName.TableName' karena direferensikan oleh batasan FOREIGN KEY.
Bagaimana Anda memotong tabel ini?
Solusi:
Sebagai tabel yang terlibat dalam hubungan Kunci Asing, Anda harus menghapus batasan kunci asing terlebih dahulu dan kemudian menjalankan pernyataan tabel truncate.Mari kita demo contoh ini, saya akan membuat dua tabel dbo.Pelanggan dan dbo.Orders lalu buat Batasan Kunci Asing pada salah satu kolom Dbo.Orders ke tabel dbo.Pelanggan.
USE YourDatabaseName GO CREATE TABLE dbo.Customer ( Customerid INT PRIMARY KEY ,FName VARCHAR(100) ,LName VARCHAR(100) ,SSN VARCHAR(10) ) CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50) ,OrderItemAmt INT, CustomerId int ) --Create Foreign Key Constraint Alter table dbo.Orders with Nocheck Add Constraint Fk_CustomerId Foreign Key(CustomerId) References dbo.Customer(CustomerId)Sekarang jika saya mencoba memotong tabel dbo.Orders, itu tidak akan menimbulkan kesalahan. Tetapi ketika saya mencoba untuk memotong tabel dbo.Customer itu akan menimbulkan kesalahan karena dbo.Customer memulai referensi oleh Batasan Kunci Asing.
Cara memotong tabel yang direferensikan oleh Batasan Kunci Asing di SQL Server |
Kita dapat menghilangkan batasan untuk saat ini, memotong tabel dan kemudian membuat batasan kunci Asing.
Untuk menemukan Batasan Kunci Asing pada tabel, Anda dapat menggunakan pernyataan di bawah ini.
SELECT * FROM sys.foreign_keys WHERE referenced_object_id = object_id('dbo.Customer')
Cara mendapatkan nama Batasan dari tabel sistem di SQL Server |
SELECT 'ALTER TABLE ' + OBJECT_SCHEMA_NAME(parent_object_id) +'.[' + OBJECT_NAME(parent_object_id) +'] DROP CONSTRAINT ' + name as DropFKConstraint FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Customer')
Cara menghilangkan Batasan Kunci Asing pada Tabel di SQL Server |
Video Demo :Tidak dapat memotong tabel karena direferensikan oleh batasan FOREIGN KEY