我与ApplicationRegion
的一对多关系中有一个表Translation
。
我想将FK从Translation.appname/isocode
设置为ApplicationRegion.appname/isocode
但是从屏幕截图中可以看出这没有用。
当FK配置窗口打开时,左/右侧显示3列
appname
isocode
resourcekey
然后我选择了父表ApplicationRegion
并从FK设置中删除了资源键列。
然后点击“确定”,然后我收到了您在屏幕截图中看到的错误。
最后我使用了这个解决方法,我想知道为什么我必须使用这个解决方法?
答案 0 :(得分:0)
我认为你必须在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])