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