Scenariusz:
Pracujesz jako programista SQL Server, musisz utworzyć tabelę dbo.Customer ze złożonym kluczem podstawowym przy użyciu kolumn FName i SSN. Po zakończeniu tworzenia klucza podstawowego w tabeli dbo.Customer, musisz utworzyć drugą tabelę dbo.Orders i utworzyć ograniczenie klucza obcego za pomocą kolumn klucza podstawowego.Rozwiązanie:
Utwórzmy tabelę dbo.Customer ze złożonym kluczem podstawowym za pomocą poniższego skryptu.USE YourDatabaseNameGOCREATE TABLE dbo.Customer ( Customerid INT Identity(1,1) ,FName VARCHAR(100) Not Null ,LName VARCHAR(100) ,SSN VARCHAR(10) nie jest pusty, Ograniczenie Pk_FName_SSN Klucz podstawowy (FName,SSN) )
Zauważ, że użyliśmy Constraint_Name Klucz podstawowy (kolumna1, kolumna2) podświetlony na zielono, aby utworzyć złożony klucz podstawowy.
Utwórzmy dbo.Orders tabeli za pomocą poniższego skryptu.
CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50) ,OrderItemAmt INT ,FirstName VARCHAR(100), SSN VARCHAR( 10) Nie Null, Ograniczenie Fk_Order_Customer_FName_SSN OBCY KLUCZ (Imię,SSN) REFERENCJE dbo.Customer(FName,SSN) )
Aby utworzyć ograniczenie klucza obcego z wieloma kolumnami, użyj skryptu podświetlonego na zielono. Powiesz Constraint Constraint_Name Foreign Key(Column1,Column2) References dbo.PrimaryKeyTable(PrimaryKeyColumn1,PrimaryKeyColumn2)
Widać, że w dbo.Orders mam kolumny FirstName zamiast FName, które mam w tabeli dbo.Customer. Oznacza to, że nie musisz mieć tej samej nazwy kolumny w obu tabelach podczas tworzenia odwołania do klucza obcego.
Wstawmy rekordy w każdej tabeli i zobaczmy, czy wszystkie działają poprawnie z kluczem obcym Ograniczenie.
INSERT INTO dbo.Customer (FName, LName,SSN) values ('Aamir','Shahzad','000-000-01') INSERT INTO dbo.Orders (OrderItemName,OrderItemAmt,FirstName,SSN) values („TV”, 1, „Aamir”, „000-000-01”)Rekordy zostały wstawione pomyślnie. Zweryfikujmy za pomocą Select query
Jak utworzyć ograniczenie klucza obcego w wielu kolumnach w tabeli SQL Server |
Spróbujmy wstawić wartość w dbo.Orders, której nie ma w dbo.Customer. Powinno to przez nas jako błąd z powodu ograniczenia klucza obcego.
INSERT INTO dbo.Orders (OrderItemName,OrderItemAmt,FirstName,SSN) wartości ('TV',1,'Aamir','000-000- 02')
Ponieważ podświetlona wartość SSN nie istnieje w dbo.Customer, wystąpił błąd poniżej.
Wiadomość 547, poziom 16, stan 0, wiersz 30. Instrukcja INSERT była w konflikcie z ograniczeniem klucza obcego „Fk_Order_Customer_FName_SSN”. Konflikt wystąpił w bazie danych "NazwaBazyDanych", tabela "dbo.Klient". Instrukcja została zakończona.
*** Kolejność kolumn powinna być taka sama jak w kluczu podstawowym, gdy tworzymy ograniczenie klucza obcego. Jeśli spróbuję utworzyć ograniczenie klucza obcego w innej kolejności, otrzymam błąd poniżej.
CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50) ,OrderItemAmt INT ,FirstName VARCHAR (100) Msg 1776, Poziom 16, Stan 0, Wiersz 13 W tabeli „dbo.Customer”, do której istnieje odwołanie, nie ma kluczy podstawowych ani kandydujących, które pasują do listy kolumn odniesienia w kluczu obcym „Fk_Order_Customer_FName_SSN”.Msg 1750, Level 16, State 0, Line 13Nie można utworzyć ograniczenia lub indeksu. Zobacz poprzednie błędy.
Wideo demonstracyjne:Jak utworzyć ograniczenie klucza obcego w wielu kolumnach w SQL Server