シナリオ:
すでに2つのテーブルdbo.Customerとdbo.Ordersを作成しています。主キーは、dbo.CustomerテーブルのCustomerId列に作成されます。USE YourDatabaseName
GO
CREATE 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 VARCHAR(50)
,OrderItemAmt INT
) dbo.Ordersテーブルを変更し、dbo.CustomerからCustomerIdの外部キー制約を追加する必要があります。
解決策:
テーブルはすでに存在するため、以下のスクリプトを使用してdbo.Ordersテーブルを変更し、外部キー制約を追加できます。外部キー制約を作成する2番目のテーブルに列がすでに存在する場合は、次のようになります。以下のスクリプトを実行することをお勧めします。テーブルに列がないため、最初にdbo.OrdersテーブルにCustomerId列を追加します。この場合、列Nameは最初のテーブル列と一致する必要はありません。dbo.Customer.CustomerId
--Add new column to Table in case you don't have
Alter table dbo.Orders
Add CustomerId int
--Add Foreign Key Constraint on Existing Table
Alter table dbo.Orders
Add Constraint Fk_CustomerId
Foreign Key(CustomerId) References dbo.Customer(CustomerId) 複合列に外部キー制約を作成する 以下のスクリプトを使用して、複合列の外部キー制約を作成できます。
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)
)
CREATE TABLE dbo.Orders (
OrderId INT Identity(1, 1)
,OrderitemName VARCHAR(50)
,OrderItemAmt INT
,FirstName VARCHAR(100),
SSN VARCHAR(10) Not Null
) 列は両方のテーブルにすでに存在するため、2番目のテーブルに列を追加する必要はありません。外部キー制約を作成するだけで済みます。以下のスクリプトを使用して、複合列の外部キー制約を作成できます。
Alter table dbo.Orders
Add Constraint Fk_Order_Customer_FName_SSN
FOREIGN KEY (FirstName,SSN) REFERENCES dbo.Customer(FName,SSN) テーブルの構文を記述します
テーブルを変更しますdbo.YourTableNameAddConstraintConstraint_NameForeign Key(Column1FromYourTableName、Column2FromYourTable)References dbo.YourFirstTable(Column1FromPrimaryKey、Column2FromPrimaryKey)
ビデオデモ:SQLServerの既存のテーブルに外部キー制約を追加する方法