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

Pernyataan ALTER TABLE bertentangan dengan batasan CHECK di SQL Server - Tutorial SQL Server / TSQL Bagian 89

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')
go
 
 
 Sisipan 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu Kolom Terhitung di SQL Server?

  2. Cara Melihat Paket Eksekusi Kueri di Azure Data Studio (SQL Server)

  3. LINQ ke SQL Ambil tanpa Loncat Penyebab Beberapa Pernyataan SQL

  4. Kapan saya harus menggunakan titik koma di SQL Server?

  5. Gabungkan nilai baris menjadi CSV (alias GROUP_CONCAT untuk SQL Server)