在SQL Server上创建的主键未标识

在SQL Server上创建的主键未标识,sql,sql-server,database,create-table,Sql,Sql Server,Database,Create Table,机器是产品的一个子类型。M_ProductID正在通过此键引用父表产品的主键。序列号用于唯一识别机器。问题是,我想从Serial_No创建一个外键到Service table中,因为我想跟踪机器的序列号(这是因为,例如,对于每个型号或类型,我们可以有许多机器,但每个机器都有其唯一的序列号),但创建时会出错。你能帮我吗 创建外键的一个要求是,所引用的表在要引用的列上必须具有唯一的键。因此,在您的示例中,为了使其工作,您需要sampMachine上的唯一键(Serial_No),以便您可以仅使用Se

机器是产品的一个子类型。M_ProductID正在通过此键引用父表产品的主键。序列号用于唯一识别机器。问题是,我想从Serial_No创建一个外键到Service table中,因为我想跟踪机器的序列号(这是因为,例如,对于每个型号或类型,我们可以有许多机器,但每个机器都有其唯一的序列号),但创建时会出错。你能帮我吗

创建外键的一个要求是,所引用的表在要引用的列上必须具有唯一的键。因此,在您的示例中,为了使其工作,您需要sampMachine上的唯一键(Serial_No),以便您可以仅使用Serial_No为其创建外键。按照现在的方式,您需要在sampService表中使用M_Product_Id,并将其添加到外键定义中

CREATE TABLE sampProduct
(
    Product_ID   VARCHAR(15) NOT NULL,
    Supplier_ID  INT NOT NULL,
    Category_ID  INT NOT NULL,
    Unit_Price   DECIMAL(10, 2)
    PRIMARY KEY(Product_ID)
)
CREATE TABLE sampMachine
(
    M_Product_ID   VARCHAR(15) NOT NULL,
    Serial_No      VARCHAR(15) NOT NULL,
    Machine_Model  VARCHAR(20),
    PRIMARY KEY(M_Product_ID, Serial_No),
    FOREIGN KEY(M_Product_ID) REFERENCES sampProduct(Product_ID)
)
CREATE TABLE sampService
(
    Service_ID  VARCHAR(15) NOT NULL,
    Serial_No   VARCHAR(15) NOT NULL,
    Complaint   VARCHAR(40) NOT NULL,
    PRIMARY KEY(Service_ID),
    FOREIGN KEY(Serial_No) REFERENCES sampMachine(Serial_No)
)

请花点时间格式化您的代码,以便我可以尝试帮助您。如果您希望从其他表引用它,您必须在
sampMachine(Serial\u No)
上定义一个
唯一的
约束(或索引)。@ypercube-谢谢您,先生,我找到了解决我问题的方法:)
create table sampService(

M_Product_ID varchar(15) not null,
Service_ID varchar(15) not null,
Serial_No varchar(15) not null,
Complaint varchar(40) not null,
primary key (Service_ID),
foreign key (Serial_No) references sampMachine(m_Product_Id, Serial_No)
)