シナリオ:
SQL Server開発者として作業している場合は、列FNameおよびSSNを使用して、複合主キーを持つテーブルdbo.Customerを作成する必要があります。 dbo.Customerテーブルで主キーの作成が完了したら、2番目のテーブルdbo.Ordersを作成し、主キー列を使用して外部キー制約を作成する必要があります。解決策:
以下のスクリプトを使用して、複合主キーを使用してdbo.Customerテーブルを作成しましょう。USE YourDatabaseName GO CREATE TABLE dbo.Customer ( Customerid INT Identity(1,1) ,FName VARCHAR(100) Not Null ,LName VARCHAR(100) ,SSN VARCHAR(10) Not Null, Constraint Pk_FName_SSN Primary Key (FName,SSN) )
緑色で強調表示されているConstraintConstraint_Name主キー(Column1、Column2)を使用して、複合主キーを作成していることに注意してください。
dbo.Ordersを作成しましょう。以下のスクリプトを使用してテーブルを作成します。
CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50) ,OrderItemAmt INT ,FirstName VARCHAR(100), SSN VARCHAR(10) Not Null, Constraint Fk_Order_Customer_FName_SSN FOREIGN KEY (FirstName,SSN) REFERENCES dbo.Customer(FName,SSN) )
複数の列を持つ外部キー制約を作成するには、緑色で強調表示されているスクリプトを使用します。 Constraint Constraint_Name外部キー(Column1、Column2)参照dbo.PrimaryKeyTable(PrimaryKeyColumn1、PrimaryKeyColumn2)
dbo.Ordersでは、dbo.CustomerテーブルにあるFNameではなくFirstName列があることがわかります。これは、外部キー参照を作成するときに、両方のテーブルで同じ列名を使用する必要がないことを意味します。
各テーブルにレコードを挿入して、すべてが外部キーで正常に機能するかどうかを確認しましょう。 Constraint。
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')レコードが正常に挿入されました。 Select query
を使用して確認しましょう |
SQLServerテーブルの複数の列に外部キー制約を作成する方法 |
dbo.Customerに存在しない値をdbo.Ordersに挿入してみましょう。外部キー制約によるエラーとして発生するはずです。
INSERT INTO dbo.Orders (OrderItemName,OrderItemAmt,FirstName,SSN) values ('TV',1,'Aamir','000-000-02')
強調表示されたSSN値がdbo.Customerに存在しないため、以下のエラーが発生しました。
メッセージ547、レベル16、状態0、行30INSERTステートメントがFOREIGNKEY制約「Fk_Order_Customer_FName_SSN」と競合しました。データベース「YourDatabaseName」、テーブル「dbo.Customer」で競合が発生しました。ステートメントは終了しました。
***列の順序は、外部キー制約を作成するときに主キーにあるものと同じである必要があります。異なる順序で外部キー制約を作成しようとすると、以下のエラーが発生します。
CREATE TABLE dbo.Orders ( OrderId INT Identity(1, 1) ,OrderitemName VARCHAR(50) ,OrderItemAmt INT ,FirstName VARCHAR(100), SSN VARCHAR(10) Not Null, Constraint Fk_Order_Customer_FName_SSN FOREIGN KEY (SSN,FirstName) REFERENCES dbo.Customer(SSN,FName) )メッセージ1776、レベル16、状態0、行13参照されるテーブル'dbo.Customer'には、外部キー'Fk_Order_Customer_FName_SSN'の参照列リストに一致する主キーまたは候補キーがありません。メッセージ1750、レベル16、状態0、行13制約またはインデックスを作成できませんでした。以前のエラーを参照してください。
ビデオデモ:SQLServerの複数の列に外部キー制約を作成する方法