Myślę, że musiałeś trafić na dziwną usterkę w SSMS. Udało mi się stworzyć Twój schemat za pomocą SSMS 2014 bez żadnych błędów. Wstępnie wypełnił trzy kolumny złożonego klucza podstawowego podczas dodawania nowego FK. Byłem ostrożny, aby upewnić się, że wszystkie zostały wymazane, zanim zacząłem dodawać dwie kolumny w FK. Może SSMS pomyślał, że jeden z pustych wierszy nadal zawiera dane.
Edycja:Pomyślałem tylko o tym, że SSMS jest znany z buforowania wszelkich zmian wprowadzonych podczas edycji tabeli. Na przykład, jeśli przejdziesz do modyfikacji dwóch tabel i masz otwarte oba okna edycji. Następnie zmieniasz PK w jednym oknie, a następnie próbujesz odwołać się do niego w drugim oknie, wystąpi błąd, ponieważ przechowuje w pamięci podręcznej schemat dla pierwszej tabeli, gdy okno zostało otwarte po raz pierwszy.
Oto moje wygenerowane 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])