2017-06-22 61 views
-1

所以我已经有了3个在我的数据库的相关表: enter image description here跨2个表引用2个主键的外键?

现在我需要创建BAD.K02和(K1.K02,SR.K02)之间的关系。什么是最简单的方法来做到这一点? 我发现THIS题目几乎相同的问题,但我仍然无法使其工作。

任何人都可以帮助我或唯一的方法来做到这一点是添加第二个外键到坏表?

+0

“之间”尚不清楚。请编辑你的问题说清楚(例如,在一个列表中):哪些表有什么列列表组成FK引用哪些列表在哪些表中? FK的子栏也必须在参考栏中显示。被引用的列表必须声明为PK *或* UNIQUE NOT NULL。另外:当您尝试自己定义FK时会发生什么? PS请勿使用图像,请使用[文本](https://meta.stackoverflow.com/q/285551/3404097)。 – philipxy

回答

0

这是创建两个外键约束的代码。您可以在这里阅读更多关于https://www.w3schools.com/sql/sql_foreignkey.asp

ALTER TABLE [dbo].[K1] WITH CHECK ADD CONSTRAINT [FK_BAD_K1] FOREIGN KEY([K02]) 
REFERENCES [dbo].[BAD] ([K02]) 
GO 

ALTER TABLE [dbo].[K1] CHECK CONSTRAINT [FK_BAD_K1] 
GO 

ALTER TABLE [dbo].[SR] WITH CHECK ADD CONSTRAINT [FK_BAD_SR] FOREIGN KEY([K02]) 
REFERENCES [dbo].[BAD] ([K02]) 
GO 

ALTER TABLE [dbo].[SR] CHECK CONSTRAINT [FK_BAD_SR] 
GO 
+0

这看起来非常有趣,但是当我尝试执行此操作时,出现错误: '1776号消息,级别16,状态0,行1 被引用表'dbo.BAD'中没有主键或候选键匹配引用外键'FK_BAD_K1'中的列表。' '消息1750,级别16,状态0,行1 无法创建约束。查看以前的错误.' 我正在使用SQL Server 2005,可能这很重要。 – dejfit

+0

你的代码只有当我设置BAD.K02作为一个PK,我不能这样做... – dejfit

+0

@dejfit你发现你的错误信息和标签googling? PS为什么你不能将BAD K02设置为PK/UNIQUE?如果被引用的列不是PK/UNIQUE,为什么你认为你有FK? – philipxy