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

Pernyataan ALTER TABLE bertentangan dengan batasan FOREIGN KEY di SQL Server - Tutorial SQL Sever / TSQL Bagian 69

Skenario:

Anda telah membuat dua tabel dbo.Customer dan dbo.Orders tanpa memiliki hubungan primary-foreign key. Setelah membuat tabel, Anda memasukkan beberapa catatan. Kemudian Anda menyadari bahwa Anda seharusnya menambahkan Batasan Kunci Asing. Ketika Anda mencoba mengubah tabel dbo.Orders , Anda menerima kesalahan.

Buat Tabel dbo.Customer dan Dbo.Order dengan menggunakan skrip di bawah ini

GUNAKAN YourDatabaseNameGOCREATE TABLE dbo .Pelanggan ( Customerid INT PRIMARY KEY ,FName VARCHAR(100) ,LName VARCHAR(100) ,SSN VARCHAR(10) )CREATE TABLE dbo.Orders (OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50),OrderItemAmt INT, ID Pelanggan int )
 Masukkan catatan sampel dengan menggunakan skrip di bawah ini.

 INSERT INTO dbo.Customer (CustomerId,FName, LName,SSN) VALUES (1,'Aamir','Shahzad','000-000- 00') INSERT INTO dbo.Orders (OrderItemName,OrderItemAmt,Customerid) nilai ('TV',2,2)
 Sekarang mari tambahkan Batasan Kunci Asing

 Ubah tabel dbo.Orders Tambahkan Batasan Fk_CustomerId Referensi Kunci Asing(CustomerId) dbo.Customer(CustomerId)
 
 
 Ketika kita mengeksekusi script di atas, kita mendapatkan error di bawah ini.

Msg 547, Level 16, State 0, Line 31
Pernyataan ALTER TABLE bertentangan dengan batasan FOREIGN KEY "Fk_CustomerId". Konflik terjadi di database "YourDatabaseName", tabel "dbo.Customer", kolom 'Customerid'.

Sebagai dbo.Customer memiliki nilai 1 untuk kolom CustomerId dan di kolom tabel dbo.Orders, CustomerId memiliki nilai 2 Nilai tidak cocok satu sama lain. Itulah alasan kami menerima kesalahan di atas.

Solusi:

1) Perbaiki data di tabel kedua (dbo.Orders) Kami dapat memperbaiki data di tabel kedua dan memperbarui nilai kolom CustomerId. Setelah kami memiliki data yang benar yang cocok dengan Tabel Utama kami ( Dbo.Customer.CustomerId), itu akan memungkinkan kami membuat Batasan Kunci Asing tanpa masalah.
2) Gunakan Ubah Tabel dengan Nocheck ( Abaikan data yang ada ) Jika Anda tidak peduli tentang hubungan data yang ada. Anda dapat menggunakan With NoCheck dengan mengubah pernyataan tabel dan itu akan mengabaikan pemeriksaan untuk memvalidasi data dan membuat Batasan Kunci Asing. Setelah Batasan Kunci Asing dibuat, itu akan memberlakukan integritas untuk setiap catatan baru yang dimasukkan.
 Ubah tabel dbo.Orders dengan Nocheck Tambahkan Batasan Fk_CustomerId Referensi Kunci Asing(CustomerId) dbo.Customer(CustomerId) 
 
 
 
 
Demo Video 
 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL OUTPUT Stored Procedures tidak berfungsi dengan ExecuteReader

  2. Tentang Perintah GO di SQL Server

  3. Bagaimana cara menambahkan Nomor Baris di SQL Server Management Studio ( SSMS) - Tutorial SQL Server / TSQL Bagian 11

  4. Bagaimana cara memasukkan pandas DataFrame ke tabel Microsoft SQL Server?

  5. Pemicu Pembaruan SQL Server, Dapatkan Hanya bidang yang dimodifikasi