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

Cara Menonaktifkan Semua Batasan PERIKSA &Kunci Asing dalam Database di SQL Server (Contoh T-SQL)

Anda dapat menggunakan kode di bawah ini untuk menonaktifkan semua CHECK dan batasan kunci asing untuk database saat ini di SQL Server.

EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"

Ini menggunakan sp_MSforeachtable yang tidak terdokumentasi dari Microsoft prosedur tersimpan. Prosedur ini memungkinkan Anda untuk melakukan tugas terhadap setiap tabel dalam database. Jadi ini sempurna untuk tugas kita di sini – untuk menonaktifkan semua CHECK batasan dalam database saat ini.

Di bawah ini adalah contoh di mana saya melakukan ini dan kemudian memeriksa hasilnya.

Contoh 1 – Tinjau Batasan

Pertama, saya akan melihat sekilas CHECK saat ini dan batasan kunci asing dalam database, untuk melihat apakah mereka diaktifkan atau dinonaktifkan.

SELECT OBJECT_NAME(parent_object_id) AS 'Table', nama AS 'Constraint', is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), nama, is_disabled, is_not_trustedFROM sys.check
 Hasil:

+----------------+-------+----------- ----+------------------+| Tabel | Batasan | is_disable | is_not_trusted ||----------------+-------+------------ ---+------------------|| Uji Kendala | chkHarga | 0 | 0 || Uji Kendala | chkValidEndDate | 0 | 0 || Uji Kendala | chkTeamSize | 0 | 0 || Pekerjaan | chkJobTitle | 0 | 0 |+----------------+-------+------------ ---+------------------+

Jadi saat ini ada empat CHECK kendala dalam database, untuk dua tabel yang berbeda.

Kita dapat melihat bahwa semua batasan diaktifkan karena is_disabled disetel ke 0 .

Contoh 2 – Nonaktifkan Batasan

Sekarang saya akan menonaktifkan semua batasan:

EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"

Biasanya ide yang baik untuk memastikan Anda menggunakan database yang benar saat melakukan hal-hal seperti ini. Jadi kita bisa menambahkan kode di atas dengan secara eksplisit beralih ke database yang benar:

Uji PENGGUNAAN;EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"

Dalam hal ini saya beralih ke database bernama Test .

Contoh 3 – Periksa Hasilnya

Setelah menjalankan kode di atas, sekarang saya akan menjalankan kueri yang sama dari contoh pertama untuk melihat hasilnya.

SELECT OBJECT_NAME(parent_object_id) AS 'Table', nama AS 'Constraint', is_disabled, is_not_trustedFROM sys.foreign_keysUNIONSELECT OBJECT_NAME(parent_object_id), nama, is_disabled, is_not_trustedFROM sys.check
 Hasil:

+----------------+-------+----------- ----+------------------+| Tabel | Batasan | is_disable | is_not_trusted ||----------------+-------+------------ ---+------------------|| Uji Kendala | chkHarga | 1 | 1 || Uji Kendala | chkValidEndDate | 1 | 1 || Uji Kendala | chkTeamSize | 1 | 1 || Pekerjaan | chkJobTitle | 1 | 1 |+----------------+-----------------+------------ ---+------------------+

Jadi semua kendala dalam database telah dinonaktifkan (karena is_disabled kolom disetel ke 1 untuk kendala tersebut).

Perhatikan bahwa is_not_trusted kolom juga disetel ke 1 . Ini merupakan pertimbangan penting, terutama jika Anda bermaksud untuk mengaktifkan kembali batasan yang dinonaktifkan.

Lihat Apa yang Harus Anda Ketahui tentang DENGAN NOCHECK saat Mengaktifkan Batasan PERIKSA di SQL Server untuk informasi tentang cara memulihkan kepercayaan saat mengaktifkan kembali batasan Anda. Informasi dalam artikel itu juga berlaku untuk kunci asing.

Nonaktifkan Kendala Satu per satu

Jika Anda hanya ingin menonaktifkan batasan satu per satu, lihat Cara Menonaktifkan Batasan CHECK di SQL Server sebagai contoh.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ubah Kata Sandi untuk Login SQL Server

  2. CAST(DATETIME AS DATE) melalui klausa WHERE

  3. Cara Mengaktifkan/Menonaktifkan Akses Data di SQL Server (Contoh T-SQL)

  4. Kinerja SQL JOIN vs IN?

  5. Buat Pemicu DML di SQL Server