Menonaktifkan batasan kunci asing dengan pernyataan INSERT dan UPDATE
Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Anda dapat menonaktifkan batasan kunci asing selama transaksi INSERT dan UPDATE di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL. Gunakan opsi ini jika Anda tahu bahwa data baru tidak akan melanggar batasan yang ada atau jika batasan hanya berlaku untuk data yang sudah ada di database.
Pembatasan dan batasan
Setelah Anda menonaktifkan batasan ini, sisipan atau pembaruan di masa mendatang ke kolom tidak akan divalidasi terhadap kondisi batasan.
Izin
Memerlukan izin UBAH pada tabel.
Menggunakan SQL Server Management Studio
Untuk menonaktifkan batasan kunci asing untuk pernyataan INSERT dan UPDATE
Di Object Explorer, perluas tabel dengan batasan lalu perluas folder Kunci .
Klik kanan batasan dan pilih Ubah.
Di kisi di bawah Perancang Tabel, pilih Berlakukan Batasan Kunci Asing dan pilih Tidak dari menu drop-down.
Pilih Tutup.
Untuk mengaktifkan kembali batasan saat diinginkan, balikkan langkah-langkah di atas. Pilih Berlakukan Batasan Kunci Asing dan pilih Ya dari menu drop-down.
Untuk mempercayai batasan dengan memeriksa data yang ada dalam hubungan kunci asing, pilih Periksa Data yang Ada pada Pembuatan Atau Aktifkan Kembali dan pilih Ya dari menu drop-down. Ini akan memastikan batasan kunci asing tepercaya.
- Jika Periksa Data yang Ada pada Pembuatan atau Pengaktifan Ulang diatur ke Tidak, kunci asing tidak memeriksa data yang ada saat diaktifkan kembali. Oleh karena itu, pengoptimal kueri tidak dapat mempertimbangkan potensi peningkatan performa. Kunci asing tepercaya direkomendasikan karena dapat digunakan untuk menyederhanakan rencana eksekusi dengan asumsi berdasarkan batasan kunci asing. Untuk memeriksa apakah kunci asing tepercaya dalam database Anda, lihat kueri sampel nanti di artikel ini.
Menggunakan Transact-SQL
Untuk menonaktifkan batasan kunci asing untuk pernyataan INSERT dan UPDATE
Di Object Explorer, sambungkan ke instans Mesin Database.
Pada bilah Standar, pilih Kueri Baru.
Salin dan tempel contoh berikut ke dalam jendela kueri dan pilih Jalankan.
USE AdventureWorks2022; GO ALTER TABLE Purchasing.PurchaseOrderHeader NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO
Untuk mengaktifkan kembali batasan saat diinginkan, salin dan tempel contoh berikut ke jendela kueri dan pilih Jalankan.
USE AdventureWorks2022; GO ALTER TABLE Purchasing.PurchaseOrderHeader CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO
Verifikasi bahwa batasan di lingkungan Anda tepercaya dan diaktifkan. Jika
is_not_trusted
= 1, maka kunci asing tidak memeriksa data yang ada saat diaktifkan kembali atau dibuat ulang. Oleh karena itu, pengoptimal kueri tidak dapat mempertimbangkan potensi peningkatan performa. Kunci asing tepercaya direkomendasikan karena dapat digunakan untuk menyederhanakan rencana eksekusi dengan asumsi berdasarkan batasan kunci asing. Salin dan tempel contoh berikut ke dalam jendela kueri dan pilih Jalankan.SELECT o.name, fk.name, fk.is_not_trusted, fk.is_disabled FROM sys.foreign_keys AS fk INNER JOIN sys.objects AS o ON fk.parent_object_id = o.object_id WHERE fk.name = 'FK_PurchaseOrderHeader_Employee_EmployeeID'; GO
Anda harus mengatur batasan kunci asing ke tepercaya jika data yang ada dalam tabel mematuhi batasan kunci asing. Untuk mengatur kunci asing ke tepercaya, gunakan skrip berikut untuk mempercayai batasan kunci asing lagi, mencatat sintaks tambahan
WITH CHECK
. Salin dan tempel contoh berikut ke dalam jendela kueri dan pilih Jalankan.ALTER TABLE [Purchasing].[PurchaseOrderHeader] WITH CHECK CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO