我有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个表的数据。
我试图以明确的方式提供。如果您需要更多投入,请告诉我。
由于
答案 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
但你仍然应该不这样做。身份是唯一的,它应该被用作主键。