シナリオ:
すでに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の既存のテーブルに外部キー制約を追加する方法