Saya pikir Anda pasti mengalami kesalahan aneh di SSMS. Saya dapat membuat skema Anda menggunakan SSMS 2014 tanpa kesalahan. Itu melakukan pra-isi tiga kolom kunci utama komposit saat menambahkan FK baru. Saya berhati-hati untuk memastikan semuanya kosong sebelum saya mulai menambahkan dua kolom di FK. Mungkin SSMS mengira salah satu baris kosong masih memiliki data di dalamnya.
Sunting:Hanya punya satu pemikiran lagi, SSMS tahu untuk menyimpan perubahan apa pun yang dibuat saat mengedit tabel. Misalnya, jika Anda pergi untuk memodifikasi dua tabel dan membuka jendela edit keduanya. Kemudian Anda mengubah PK di satu jendela dan kemudian mencoba mereferensikannya di jendela kedua, itu akan error karena telah di-cache skema untuk tabel pertama ketika jendela pertama kali dibuka.
Ini DDL yang saya buat:
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])