シナリオ:
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の複数の列に外部キー制約を作成する方法