创建SQL Server表关系的问题

时间:2018-03-09 17:12:11

标签: sql sql-server

我有2张桌子。

第一张表:

create table abc
(
    AId  INT IDENTITY(1,1),
    Name NVARCHAR(50),
    EMP NVARCHAR(50)

    CONSTRAINT PK_abc PRIMARY KEY (AId, Name)
)

第二张表:

create table def
(
    AId  INT,
    Comment NVARCHAR(50)

    constraint FK_aid FOREIGN KEY (AId) references abc (AId)
)

这会引发错误:

  

参考表中没有主键或候选键' abc'与外键中的引用列列表匹配' FK_aid'。

所以我更新为:

create table def
(
    AId  INT,
    Name NVARCHAR(50),
    Comment NVARCHAR(50)

    constraint FK_AID FOREIGN KEY (AId, Name) references abc (AId, Name)
)

但这引发了另一个错误:

  

在列级FOREIGN KEY约束中指定了多个键,表' def'。

不确定我在这里缺少什么。

--- ----更新

很抱歉给出一个模糊的例子。我在这里解释我的问题很困难。我附上了我的问题的截图。这通过连接到3个表来显示我期望的最终输出。从输入表单填充3个表的数据。

我试图以明确的方式提供。如果您需要更多投入,请告诉我。

附件:   https://imgur.com/a/jfFS6

由于

2 个答案:

答案 0 :(得分:3)

您有一个标识列。将它用作主键:

create table abc (
    AId  INT IDENTITY(1,1) PRIMARY KEY,
    Name NVARCHAR(50),
    EMP NVARCHAR(50)
);

create table def (
    AId  INT,
    Comment NVARCHAR(50)
    constraint FK_aid FOREIGN KEY (AId) references abc (AId)
);

Name不应该在主键的定义中。

答案 1 :(得分:0)

看起来你必须单独作出声明:

ALTER TABLE [dbo].[def]  WITH CHECK ADD  CONSTRAINT [FK_def_abc] FOREIGN KEY([AId], [Name])
REFERENCES [dbo].[abc] ([AId], [Name])
GO

ALTER TABLE [dbo].[def] CHECK CONSTRAINT [FK_def_abc]
GO  

但你仍然应该这样做。身份是唯一的,它应该被用作主键。