sql >> Databáze >  >> RDS >> Sqlserver

Příkaz ALTER TABLE byl v konfliktu s omezením FOREIGN KEY v SQL Server - SQL Sever / Výukový program TSQL, část 69

Scénář:

Vytvořili jste dvě tabulky dbo.Customer a dbo.Orders bez vztahu primárního a cizího klíče. Po vytvoření tabulek jste vložili několik záznamů. Později jste si uvědomili, že jste měli přidat omezení cizího klíče. Při pokusu o změnu tabulky dbo.Orders se zobrazila chyba.

Vytvořte tabulky dbo.Customer a Dbo.Order pomocí níže uvedeného skriptu

USE YourDatabaseNameGOCREATE TABLE dbo .Zákazník ( Customerid INT PRIMARY KEY ,FNname VARCHAR(100) ,LNname VARCHAR(100) ,SSN VARCHAR(10) )CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName(50der)VAR CustomerId int )
 Vložte vzorové záznamy pomocí níže uvedeného skriptu.

 INSERT INTO dbo.Customer (CustomerId,FName, LName,SSN) VALUES (1,'Aamir','Shahzad','000-000- 00') INSERT INTO dbo.Orders (OrderItemName,OrderItemAmt,Customerid) hodnoty ('TV',2,2)
 Nyní přidejte omezení cizího klíče

 Změnit tabulku dbo.Orders Přidat omezení Fk_CustomerId Foreign Key(CustomerId) Reference dbo.Customer(CustomerId)
 
 
 Když spustíme výše uvedený skript, dostaneme chybu pod.

Zpráva 547, úroveň 16, stav 0, řádek 31
Příkaz ALTER TABLE byl v konfliktu s omezením FOREIGN KEY "Fk_CustomerId". Ke konfliktu došlo v databázi "YourDatabaseName", tabulce "dbo.Customer", sloupci 'Customerid'.

Protože dbo.Customer má hodnotu 1 pro sloupec CustomerId a ve sloupci tabulky dbo.Orders má CustomerId hodnotu 2 Hodnoty se navzájem neshodují. To je důvod, proč jsme obdrželi výše uvedenou chybu.

Řešení:

1) Opravte data v druhé tabulce (dbo.Orders) Můžeme opravit data ve druhé tabulce a aktualizovat hodnoty sloupce CustomerId. Jakmile budeme mít správná data, která se shodují s naší primární tabulkou (Dbo.Customer.CustomerId), umožní nám to bez problémů vytvořit omezení cizího klíče.
2) Použijte Alter Table s Nocheck (Ignorovat existující data ) Pokud vám nezáleží na vztahu existujících dat. Můžete použít With NoCheck s příkazem alter table, který bude ignorovat kontrolu pro ověření dat a vytvoření omezení cizího klíče. Jakmile bude vytvořeno omezení cizího klíče, bude vynucovat integritu pro všechny nově vložené záznamy.
 Změňte tabulku dbo.Orders pomocí Nocheck Add Constraint Fk_CustomerId Foreign Key(CustomerId) Reference dbo.Customer(CustomerId) 
 
  
Video ukázka 


  1. Aktualizace Postgresql s připojením

  2. Jak optimalizovat databázi webových stránek

  3. Jak vložit data CSV do databáze PostgreSQL (vzdálená databáze)

  4. Rozdělte řetězec mezerou a znakem jako oddělovač v Oracle pomocí regexp_substr