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

Cara Menonaktifkan Batasan CHECK di SQL Server (Contoh T-SQL)

Saat Anda mencoba memasukkan data ke dalam tabel yang memiliki fungsi CHECK . yang diaktifkan sepenuhnya kendala, Anda hanya akan berhasil jika data tidak melanggar kendala itu. Jika Anda mencoba memasukkan data yang tidak valid, operasi akan gagal dengan kesalahan.

Tetapi bagaimana jika Anda menemukan diri Anda dalam situasi di mana Anda benar-benar harus masukkan data yang akan melanggar CHECK paksaan? Mungkin batasan tidak lagi berlaku, atau mungkin Anda memiliki pengecualian di mana satu baris diizinkan untuk melewati batasan. Bagaimanapun, Anda tidak akan bisa memasukkan apa pun di luar aturan batasan.

Jika Anda menemukan diri Anda dalam situasi ini, Anda selalu dapat menonaktifkan batasan. Berikut cara melakukannya menggunakan Transact-SQL.

Contoh 1 – Nonaktifkan Batasan CHECK

Untuk menonaktifkan CHECK kendala, gunakan NOCHECK argumen dalam ALTER TABLE pernyataan.

Seperti ini:

ALTER TABLE Occupation  
NOCHECK CONSTRAINT chkJobTitle; 

Kode ini menonaktifkan batasan yang disebut chkJobTitle .

Contoh 2 – Tinjau Batasan CHECK

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

SELECT 
  name,
  is_disabled,
  is_not_trusted,
  definition
FROM sys.check_constraints;

Hasil:

+-----------------+---------------+------------------+----------------------------------------+
| name            | is_disabled   | is_not_trusted   | definition                             |
|-----------------+---------------+------------------+----------------------------------------|
| chkPrice        | 0             | 0                | ([Price]>(0))                          |
| chkValidEndDate | 0             | 0                | ([EndDate]>=[StartDate])               |
| chkTeamSize     | 0             | 0                | ([TeamSize]>=(5) AND [TeamSize]<=(20)) |
| chkJobTitle     | 1             | 1                | ([JobTitle]<>'Digital Nomad')          |
+-----------------+---------------+------------------+----------------------------------------+

Dalam hal ini saya memilih semua CHECK batasan 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 . Ini menunjukkan bahwa CHECK batasan belum diverifikasi oleh sistem untuk semua baris.

Dengan kata lain, kita tidak bisa lagi berasumsi bahwa kendala 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 CHECK kendala, Anda akan memiliki kesempatan untuk memulihkan kepercayaan kendala (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.

Lihat Apa yang Harus Anda Ketahui tentang WITH NOCHECK saat Mengaktifkan Batasan CHECK di SQL Server untuk mendemonstrasikan bagaimana kepercayaan terpengaruh, bergantung pada cara Anda mengaktifkan kembali batasan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Bergabung ke baris pertama

  2. T-SQL - Aliasing menggunakan =versus as

  3. 7 Cara Mengembalikan Semua Tabel dengan Kunci Utama di SQL Server

  4. Metrik Kinerja SQL Server untuk Tetap Terdepan dalam Game

  5. Apa yang dimaksud dengan program atau skrip baris perintah sederhana untuk membuat cadangan database server SQL?