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

Cara Menonaktifkan Batasan Kunci Asing di SQL Server (Contoh T-SQL)

Jika Anda berada dalam situasi di mana Anda perlu menonaktifkan batasan kunci asing di SQL Server, berikut cara melakukannya menggunakan Transact-SQL.

Ini akan memungkinkan Anda untuk memasukkan data tanpa dibatasi oleh kunci asing. Jelas, Anda tidak akan melakukan ini kecuali Anda memiliki alasan yang sangat bagus untuk melakukannya. Kunci asing menegakkan integritas referensial, sehingga menonaktifkannya berpotensi menciptakan segala macam masalah.

Contoh 1 – Nonaktifkan Batasan Kunci Asing

Untuk menonaktifkan batasan kunci asing, gunakan NOCHECK argumen dalam ALTER TABLE pernyataan.

Seperti ini:

ALTER TABLE BandMember 
NOCHECK CONSTRAINT FK_BandMember_Musician; 

Kode ini menonaktifkan batasan kunci asing yang disebut FK_BandMember_Musician .

Contoh 2 – Tinjau Batasan

Kita dapat menanyakan sys.foreign_keys tampilan sistem untuk memverifikasi bahwa batasan kami telah dinonaktifkan:

SELECT 
  name AS 'Constraint',
  is_disabled,
  is_not_trusted
FROM sys.foreign_keys;

Hasil:

+--------------------------------+---------------+------------------+
| Constraint                     | is_disabled   | is_not_trusted   |
|--------------------------------+---------------+------------------|
| FK_BandMember_Band             | 0             | 0                |
| FK_BandMember_Musician         | 1             | 1                |
| FK_MembershipPeriod_BandMember | 0             | 0                |
+--------------------------------+---------------+------------------+

Dalam hal ini saya memilih semua batasan kunci asing dari database saat ini.

Kita dapat melihat bahwa ini adalah satu-satunya yang dinonaktifkan (karena is_disabled kolom disetel ke 1 ).

Anda mungkin memperhatikan bahwa is_not_trusted kolom juga disetel ke 1 . Hal ini menunjukkan bahwa kendala belum diverifikasi oleh sistem.

Ini masuk akal, karena kita tidak bisa lagi berasumsi bahwa batasan telah memeriksa semua data. Fakta bahwa batasan dinonaktifkan berarti bahwa data sekarang dapat masuk ke database tanpa diperiksa oleh batasan. Oleh karena itu, ada potensi data yang tidak valid ada di database.

Jika Anda perlu mengaktifkan kembali batasan, Anda akan memiliki kesempatan untuk memulihkan kepercayaan batasan (dengan menggunakan WITH CHECK pilihan). Ini akan memeriksa semua baris yang ada sebelum mengaktifkan batasan.

Anda juga akan memiliki opsi untuk tidak memeriksa data yang ada, tetapi ini hanya boleh dilakukan dalam kasus yang jarang terjadi.

Ini kueri yang sama lagi, tetapi dengan beberapa kolom tambahan untuk menampilkan tabel dan tabel yang direferensikan:

SELECT 
  name AS 'Constraint',
  OBJECT_NAME(parent_object_id) AS 'Table',
  OBJECT_NAME(referenced_object_id) AS 'Referenced Table',
  is_disabled,
  is_not_trusted
FROM sys.foreign_keys;

Hasil:

+--------------------------------+------------------+---------------------+---------------+------------------+
| Constraint                     | Table            | Referenced Table    | is_disabled   | is_not_trusted   |
|--------------------------------+------------------+---------------------+---------------+------------------|
| FK_BandMember_Band             | BandMember       | Band                | 0             | 0                |
| FK_BandMember_Musician         | BandMember       | Musician            | 1             | 1                |
| FK_MembershipPeriod_BandMember | MembershipPeriod | BandMember          | 0             | 0                |
+--------------------------------+------------------+---------------------+---------------+------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cuplikan Basis Data SQL Server -2

  2. SQL Server:Ekstrak Tabel Meta-Data (deskripsi, bidang dan tipe datanya)

  3. Cara menghasilkan Script untuk Menambahkan Batasan Default ke Kolom di Beberapa Tabel di Database SQL Server - Tutorial SQL Server / TSQL Bagian 94

  4. TSQL:Bagaimana cara mengubah waktu lokal ke UTC? (SQLServer 2008)

  5. Mengonversi file SQL2008 RDL ke SQL2005