繁体   English   中英

SQL Server Management Studio不允许我为多个主键创建多个外键

[英]SQL Server Management Studio does NOT let me create multiple foreign keys to multiple primary keys

我有一个表ApplicationRegion在一个一对多的关系Translation

我想将FK从Translation.appname/isocodeApplicationRegion.appname/isocode

但是,从屏幕截图中可以看到,这没有用。

当FK配置窗口打开时,左侧/右侧显示3列

appname
isocode
resourcekey

然后,我选择作为父表ApplicationRegion并从FK设置中删除了资源键列。

然后单击“确定”,但随后出现屏幕截图中显示的错误。

在此处输入图片说明

最终,我将其与该替代方法一起使用,并且我想知道为什么必须使用此替代方法?

  1. 从Translation.ResourceKey列中删除PK
  2. 打开FK配置窗口
  3. 现在只有2列显示为外键
  4. 我点击确定
  5. 现在,我再次将PK添加到Translation.ResouceKey列
  6. 我将测试数据添加到所有3个表中,一切都很好。

为什么使用此解决方法?

UPDATE

哈哈...

在此处输入图片说明

我认为您一定在SSMS中遇到了奇怪的问题。 我能够使用SSMS 2014创建您的架构,而没有任何错误。 在添加新的FK时,它确实预填充了三个复合主键列。 在开始在FK中添加两列之前,我要小心确保将它们全部清空。 也许SSMS认为空白行之一中仍然有数据。

编辑:再想一想,SSMS以缓存在编辑表时所做的任何更改而闻名。 例如,如果您要修改两个表并同时打开两个编辑窗口。 然后,您在一个窗口中更改PK,然后尝试在第二个窗口中引用它,这将出错,因为它已在第一次打开窗口时缓存了第一个表的架构。

这是我生成的DDL:

CREATE TABLE [dbo].[AppRegion](
    [appname] [nvarchar](50) NOT NULL,
    [isocode] [char](5) NOT NULL,
 CONSTRAINT [PK_AppRegion] PRIMARY KEY CLUSTERED 
(
    [appname] ASC,
    [isocode] ASC
)
) ON [PRIMARY]

CREATE TABLE [dbo].[Translation](
    [ResourceKey] [nvarchar](128) NOT NULL,
    [appname] [nvarchar](50) NOT NULL,
    [isocode] [char](5) NOT NULL,
    [text] [nvarchar](400) NULL,
 CONSTRAINT [PK_Translation] PRIMARY KEY CLUSTERED 
(
    [ResourceKey] ASC,
    [appname] ASC,
    [isocode] ASC
)
) ON [PRIMARY]

ALTER TABLE [dbo].[Translation]   ADD  CONSTRAINT [FK_Translation_AppRegion] FOREIGN KEY([appname], [isocode])
REFERENCES [dbo].[AppRegion] ([appname], [isocode])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM