Sql server sql server添加外键列与现有主键或唯一约束不匹配

Sql server sql server添加外键列与现有主键或唯一约束不匹配,sql-server,Sql Server,你好,我有一张简单的桌子 CREATE TABLE [dbo].[PRICING]( [ID_PRICE] [int] NOT NULL, [DATA_START] [datetime] NOT NULL, [DATA_END] [datetime] NOT NULL, CONSTRAINT [PK_PRICING] PRIMARY KEY CLUSTERED ( [ID_PRICE] ASC, [DATA_START] ASC, [DATA_

你好,我有一张简单的桌子

CREATE TABLE [dbo].[PRICING](
    [ID_PRICE] [int] NOT NULL,
    [DATA_START] [datetime] NOT NULL,
    [DATA_END] [datetime] NOT NULL,
 CONSTRAINT [PK_PRICING] PRIMARY KEY CLUSTERED 
(
    [ID_PRICE] ASC,
    [DATA_START] ASC,
    [DATA_END] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
主键由3列组成(我需要这个三键)

现在我需要将它与另一个表关联,如

CREATE TABLE [dbo].[MOV](
    [ID_MOV] [int] IDENTITY(1,1) NOT NULL,
    [SALDO] [float] NOT NULL,
    [ID_PRICING_BUY] [int] NOT NULL,
    [ID_PRICING_SELL] [int] NOT NULL,
 CONSTRAINT [PK_MOV] PRIMARY KEY CLUSTERED 
(
    [ID_MOV] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
当我尝试将外键添加到第二个表中,添加ID_PRICING_BUY in表MOV和ID_PRICE in表PRICING之间的关系时,我得到了错误 该列与现有主键或唯一约束不匹配

现在,将这两个表关联起来的正确方法是什么


谢谢。

如果定价表中有一个由3列组成的复合主键,那么引用该的所有外键也必须包括所有三列

ALTER TABLE dbo.MOV
ADD CONSTRAINT FK_MOV_PRICING
FOREIGN KEY(ID_PRICING_BUY, -new-column-for-start-date-, -new-column-for-end-date-)
REFERENCES dbo.PRICING(ID_PRICE, DATA_START, DATA_END)
外键不能仅引用主键的一部分

唯一的另一种选择是仅在
dbo.Pricing(ID\u Price)
上创建唯一索引——然后您可以从外键引用该唯一约束


但是,如果您可以只在
dbo.Pricing(ID\u Price)
上创建一个唯一的索引,那么真正的问题就是为什么不仅仅是
ID\u Price
是主键?如果它已经是唯一的->那么为什么还要在主键中添加两列呢?

如果定价表中有一个由3列组成的复合主键,那么引用该的所有外键也必须包括所有三列

ALTER TABLE dbo.MOV
ADD CONSTRAINT FK_MOV_PRICING
FOREIGN KEY(ID_PRICING_BUY, -new-column-for-start-date-, -new-column-for-end-date-)
REFERENCES dbo.PRICING(ID_PRICE, DATA_START, DATA_END)
外键不能仅引用主键的一部分

唯一的另一种选择是仅在
dbo.Pricing(ID\u Price)
上创建唯一索引——然后您可以从外键引用该唯一约束


但是,如果您可以只在
dbo.Pricing(ID\u Price)
上创建一个唯一的索引,那么真正的问题就是为什么不仅仅是
ID\u Price
是主键?如果它已经是唯一的->那么为什么还要在主键中再添加两列呢?

我认为这是因为在定价表中,您的主键是由3列组成的。这就是为什么你会出错。将类似于MOV表的PK添加到定价表中,然后尝试在MOVI think中引用它,因为在定价表中,您的PK由3列组成。这就是为什么你会出错。将类似于MOV表的PK添加到定价表中,然后尝试在MOV中引用它谢谢,三键对检查数据完整性很有用。。但是我淘汰了。现在ID_Price是您建议的唯一主键。谢谢,三键对检查数据完整性很有用。。但是我淘汰了。现在ID_Price是您建议的唯一主键。