Scenarie:
Du har oprettet to tabeller dbo.Customer og dbo.Orders uden at have primær-udenlandsk nøglerelation. Efter at have oprettet tabeller indsatte du få poster. Senere indså du, at du skulle tilføje Foreign Key Constraint. Da du forsøgte at ændre dbo.Orders-tabellen, modtog du en fejl.Opret dbo.Customer- og Dbo.Order-tabeller ved at bruge nedenstående script
USE YourDatabaseNameGOCREATE TABLE dbo .Kunder CustomerId int )Indsæt eksempelposter ved at bruge nedenstående script.
INSERT INTO dbo.Customer (CustomerId,FName, LName,SSN) VALUES (1,'Aamir','Shahzad','000-000- 00') INSERT INTO dbo.Orders (OrderItemName,OrderItemAmt,Customerid) værdier ('TV',2,2)Lad os nu tilføje Foreign Key Constraint
Ændre tabel dbo.Orders Tilføj Constraint Fk_CustomerId Foreign Key(CustomerId) Referencer dbo.Customer(CustomerId)Når vi udfører ovenstående script, får vi under fejl.
Besked 547, niveau 16, tilstand 0, linje 31
ALTER TABLE-sætningen var i konflikt med FOREIGN KEY-begrænsningen "Fk_CustomerId". Konflikten opstod i databasen "YourDatabaseName", tabel "dbo.Customer", kolonne 'Customerid'.
Da dbo.Customer har værdi 1 for CustomerId-kolonnen og i dbo.Orders-tabelkolonnen CustomerId har værdi 2 Værdierne stemmer ikke overens med hinanden. Det er grunden til, at vi modtog ovenstående fejl.
Løsninger:
1) Ret dataene i anden tabel (dbo.Orders) Vi kan rette dataene i anden tabel og opdatere CustomerId-kolonnens værdier. Når vi først har de korrekte data, der stemmer overens med vores primære tabel ( Dbo.Customer.CustomerId), vil det lade os oprette fremmednøglebegrænsning uden problemer.2) Brug Altertabel med Nocheck ( Ignorer eksisterende data ) Hvis du er ligeglad med forholdet mellem eksisterende data. Du kan bruge With NoCheck med alter table statement, og det vil ignorere kontrollen for at validere data og oprette Foreign Key Constraint. Når først Foreign Key Constraint er oprettet, vil den håndhæve integritet for alle nye poster, der er indsat.
Ændre tabel dbo.Orders with Nocheck Add Constraint Fk_CustomerId Foreign Key(CustomerId) References dbo.Customer(CustomerId)Videodemo