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.