Skenario:
Anda bekerja sebagai pengembang SQL Server, Anda diminta untuk menambahkan Check Constraint ke satu tabel yang ada dbo.Employee pada kolom FName dan menulis logika untuk Check Constraint sehingga harus selalu menerima alfabet.Ketika Anda mencoba untuk tambahkan Batasan Periksa, Anda mendapatkan kesalahan di bawah ini.
Msg 547, Level 16, Status 0, Baris 19
Pernyataan ALTER TABLE bertentangan dengan batasan CHECK "Chk_dbo_Employee_FName".
Konflik terjadi pada database "YourDatabaseName", tabel "dbo.Employee", kolom 'FName'.
Solusi:
Mari buat skenario terlebih dahulu untuk kesalahannya. Buat contoh tabel dbo.Employee dengan beberapa contoh data.--Create Table use YourDatabaseName go Create table dbo.Employee ( FName VARCHAR(100) Not Null, LName VARCHAR(100), StreetAddress VARCHAR(255) ) --Insert data in sql table insert into dbo.Employee(FName,LName,StreetAddress) values ('Aamir','Shahzad','xyz address') go insert into dbo.Employee(FName,LName,StreetAddress) values ('Raza A',Null,'abc address') go
Sekarang jalankan pernyataan alter table untuk menambahkan Check Constraint. Setelah Anda menjalankan pernyataan ini, Anda akan mendapatkan kesalahan di atas. karena data yang ada tidak memenuhi syarat untuk Periksa Batasan. Kami memiliki spasi di nama depan untuk 'Raza A' dan Batasan Pemeriksaan kami mengatakan bahwa data di FName harus selalu alfabet.
Alter table dbo.Employee Add Constraint Chk_dbo_Employee_FName Check (FName not like '%[^a-z]%')1) Solusi Pertama:Memperbaiki solusi DataFist yang ada dapat, Anda menemukan data yang tidak memenuhi syarat untuk Periksa Kendala dan perbaiki itu lalu tambahkan Periksa Kendala.
2) Jika bisnis tidak ingin memperbaiki data yang ada dan ingin menerapkan Batasan Pemeriksaan dari bergerak maju, Anda dapat membuat Batasan Pemeriksaan dengan Nocheck. Dengan melakukan itu, itu tidak akan memvalidasi data yang ada terhadap aturan Batasan Pemeriksaan kami tetapi hanya berlaku untuk data baru.
Alter table dbo.Employee with nocheck Add Constraint Chk_dbo_Employee_FName Check (FName not like '%[^a-z]%')Mari masukkan beberapa record dan periksa apakah Batasan kita berfungsi seperti yang diharapkan.
insert into dbo.Employee(FName,LName,StreetAddress) values ('Test 123',Null,'test address') go insert into dbo.Employee(FName,LName,StreetAddress) values ('Najaf',Null,'test address') goSisipan pertama akan gagal karena tidak memenuhi syarat dengan aturan Periksa Batasan kami. Catatan kedua akan berhasil dimasukkan. Mari kita periksa data dalam tabel sekarang.
Cara menambahkan Batasan Periksa ke Kolom dengan Data yang Ada di SQL Server |
Demo Video :Cara memperbaiki kesalahan pernyataan Alter tabel yang bertentangan dengan Batasan Pemeriksaan