Сценарий:
Създадохте две таблици dbo.Customer и dbo.Orders без връзка първичен-външен ключ. След създаването на таблици сте вмъкнали няколко записа. По-късно разбрахте, че е трябвало да добавите ограничение на външния ключ. Когато се опитахте да промените таблицата dbo.Orders , получихте грешка.Създайте таблици dbo.Customer и Dbo.Order с помощта на скрипта по-долу
ИЗПОЛЗВАЙТЕ ИМЕТО на вашата база данниGOCREATE TABLE dbo .Customer (Customerid INT PRIMARY KEY ,FName VARCHAR(100) ,LName VARCHAR(100) ,SSN VARCHAR(10) )CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName(1,1) ,OrderitemName(100) CustomerId int )Вмъкнете примерни записи, като използвате скрипта по-долу.
ВМЕСЕТЕ В dbo.Customer (CustomerId,FName, LName,SSN) СТОЙНОСТИ (1,'Aamir','Shahzad','000-000- 00') INSERT INTO dbo.Orders (OrderItemName,OrderItemAmt,Customerid) стойности ('TV',2,2)Сега нека добавим ограничение на външния ключ
Промяна на таблицата dbo.Orders Добавяне на ограничение Fk_CustomerId Външен ключ(CustomerId) Препратки dbo.Customer(CustomerId)Когато изпълним горния скрипт, получаваме грешка по-долу.
Съобщение 547, ниво 16, състояние 0, ред 31
Изразът ALTER TABLE е в конфликт с ограничението FOREIGN KEY "Fk_CustomerId". Конфликтът е възникнал в базата данни "YourDatabaseName", таблица "dbo.Customer", колона "Customerid".
Тъй като dbo.Customer има стойност 1 за колона CustomerId и в dbo.Orders таблицата колона CustomerId има стойност 2 Стойностите не съвпадат една с друга. Това е причината да получим горната грешка.
Решения:
1) Коригирайте данните във втората таблица (dbo.Orders) Можем да коригираме данните във втората таблица и да актуализираме стойностите на колоната CustomerId. След като имаме правилни данни, които съвпадат с нашата първична таблица ( Dbo.Customer.CustomerId), това ще ни позволи да създадем ограничение на външния ключ без никакъв проблем.2) Използвайте Alter Table с Nocheck (Игнорирайте съществуващите данни ) Ако не ви интересува връзката на съществуващите данни. Можете да използвате With NoCheck with alter table statement и той ще игнорира проверката, за да потвърди данните и да създаде ограничение на външния ключ. След като бъде създадено ограничението за външния ключ, то ще наложи целостта за всички вмъкнати нови записи.
Променете таблицата dbo.Orders с Nocheck Добавяне на ограничение Fk_CustomerId Външен ключ(CustomerId) Референции dbo.Customer(CustomerId)предварително>Видео демонстрация