外键中数据类型的问题?

时间:2018-05-17 23:36:35

标签: sql sql-server

我正在尝试为计算机零件库存创建数据库。这是我的Merger表:

CREATE TABLE [dbo].Merger
(
    [ID] INT NOT NULL  IDENTITY, 
    [EntryID] INT NOT NULL, 
    [PartID] VARCHAR(50) NOT NULL, 
    [ModelID] VARCHAR(50) NOT NULL, 
    [QuantityID] INT NOT NULL, 
    [LocationID] VARCHAR(50) NOT NULL,
    [DescriptionID] NVARCHAR(MAX) NOT NULL, 
    CONSTRAINT [PK_Merger] PRIMARY KEY ([ID]), 
    CONSTRAINT [EntryFK] FOREIGN KEY ([EntryID]) REFERENCES [Entry]([ID]), 
    CONSTRAINT [PartFK] FOREIGN KEY ([PartID]) REFERENCES [Part]([ID]), 
    CONSTRAINT [ModelFK] FOREIGN KEY ([ModelID]) REFERENCES [Model]([ID]), 
    CONSTRAINT [QuantityFK] FOREIGN KEY ([QuantityID]) REFERENCES [Quantity]([ID]), 
    CONSTRAINT [LocationFK] FOREIGN KEY ([LocationID]) REFERENCES [Location]([ID]),
    CONSTRAINT [DescriptionFK] FOREIGN KEY ([DescriptionID]) REFERENCES [Description]([ID]),
)

出于某种原因,粗体的回来时会出现错误:

  

SQL71515:列'[dbo]。[Part]。[ID]'与引用列'[dbo]。[Merger]。[PartID]'在外键中的数据类型不同。

这对我来说没有意义,因为数据类型是相同的,在Merger表和从中提取数据的表中。如果有人知道如何解决这个问题,请帮忙!

我已经尝试删除所有主键并保存,然后重新添加它们并再次尝试外键,但没有运气。

我已将OP的评论移至问题:

CREATE TABLE [dbo].Part 
( 
    [ID] INT NOT NULL IDENTITY, 
    [Part] VARCHAR(50) NOT NULL, 
    CONSTRAINT [PK_Part] PRIMARY KEY ([ID]) 
)

2 个答案:

答案 0 :(得分:2)

Merger表格中,PartID列定义为VARCHAR(50)

Part表格中,ID列定义为INT

intvarchar是不同的类型,错误消息就是这样说的。

您应该将Merger.PartID列的类型更改为int以匹配Part.ID列的类型。

答案 1 :(得分:0)

  

" SQL71515:列' [dbo。[Part。[ID]'与数据类型不同   引用列' [dbo]。[合并]。[PartID]'在外键中。"

不仅相同的数据类型,还要检查它们是否具有相同的长度和属性。

根据我的经验写这个,所以请检查一下。