Menonaktifkan batasan kunci asing dengan pernyataan INSERT dan UPDATE

Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform 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

  1. Di Object Explorer, perluas tabel dengan batasan lalu perluas folder Kunci.

  2. Klik kanan batasan dan pilih Ubah.

  3. Di kisi di bawah Designer Tabel, pilih Berlakukan Batasan Kunci Asing dan pilih Tidak dari menu drop-down.

  4. Pilih Tutup.

  5. Untuk mengaktifkan kembali batasan saat diinginkan, balikkan langkah-langkah di atas. Pilih Berlakukan Batasan Kunci Asing dan pilih Ya dari menu drop-down.

  6. 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 dipercaya dalam database Anda, lihat kueri sampel nanti di artikel ini.

Menggunakan Transact-SQL

Untuk menonaktifkan batasan kunci asing untuk pernyataan INSERT dan UPDATE

  1. Di Object Explorer, sambungkan ke instans Mesin Database.

  2. Pada bilah Standar, pilih Kueri Baru.

  3. 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  
    
  4. 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  
    
  5. 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, dengan 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
    

Langkah berikutnya