SQl Server-无法引用复合主键

SQl Server-无法引用复合主键,sql,sql-server,Sql,Sql Server,我是SQL server新手,我有一个包含复合主键的表,如下所示: CREATE TABLE Systems ( Layer VARCHAR(25), System_Name VARCHAR(25) , Sub_System_Name VARCHAR(25), Q1_Scope VARCHAR(25), Q2_Scope VARCHAR(25), Q3_Scope VARCHAR(25), Q4_Scope VARCHAR(25), U20 VARCHAR(25), Extracts_Reque

我是SQL server新手,我有一个包含复合主键的表,如下所示:

CREATE TABLE Systems
(
Layer VARCHAR(25),
System_Name VARCHAR(25) ,
Sub_System_Name VARCHAR(25),
Q1_Scope VARCHAR(25),
Q2_Scope VARCHAR(25),
Q3_Scope VARCHAR(25),
Q4_Scope VARCHAR(25),
U20 VARCHAR(25),
Extracts_Requested VARCHAR(25),
Extracts_Received VARCHAR(25),
Control VARCHAR(25),
Extracts_Reviewed VARCHAR(25),
Control_Frequency VARCHAR(25),
System_Layer_Exists VARCHAR(25),
Notes VARCHAR(25),
Alias VARCHAR(25),
Extract_Requested_Date VARCHAR(25),
PRIMARY KEY (Layer,System_Name,Sub_System_Name)
);
现在我想将Layer、System_Name、Sub_System_Name等列引用到另一个表中,比如:

CREATE TABLE Owns_System
(
Name VARCHAR(25) FOREIGN KEY REFERENCES Employees(Name),
 Layer VARCHAR(25) FOREIGN KEY REFERENCES Systems(Layer),
System_Name VARCHAR(25) FOREIGN KEY REFERENCES Systems(System_Name),
Sub_System_Name VARCHAR(25) FOREIGN KEY REFERENCES Systems(Sub_System_Name),
Role VARCHAR(25)
);
它向我显示了表系统的错误

“表系统中没有主键/候选键”

谁能告诉我我做错了什么

外键是一个表中的字段(或字段集合),它 指另一个表中的主键

因此,在将一个表(比如TableA)中的列(PKey)引用为另一个表(TableB)中的外键之前,需要确保列PKeyTableA中的主键/唯一键

桌子的设计可能是这样的

CREATE TABLE TableA
(
PKey INT PRIMARY KEY,
FullName VARCHAR(50),
Email VARCHAR(255) NOT NULL UNIQUE
)

CREATE TABLE TableB
(
Id INT PRIMARY KEY,
FKey INT FOREIGN KEY References TableA(PKey),
Email VARCHAR(255) FOREIGN KEY References TABLEA(Email)
)

有关外键的更多详细信息,请参阅此链接。您不想声明3个单独的外键约束-您需要使用单个复合外键:

CREATE TABLE Owns_System
(
Name VARCHAR(25) FOREIGN KEY REFERENCES Employees(Name),
Layer VARCHAR(25),
System_Name VARCHAR(25),
Sub_System_Name VARCHAR(25),
Role VARCHAR(25),
constraint FK_Blah FOREIGN KEY (Layer,System_Name,Sub_System_Name)
     REFERENCES Systems(Layer,System_Name,Sub_System_Name)
);

谢谢你的回复。我只想将表A中的多列引用到表B中。我能做些什么。你能给我提供一些例子吗?你也可以在一个表中设置唯一的键作为另一个表中的外键。因此,如果希望将同一表的多个列引用为另一个表中的外键,可以尝试将这些列设置为唯一键