मुझे लगता है कि आपने SSMS में एक अजीब गड़बड़ की होगी। मैं बिना किसी त्रुटि के SSMS 2014 का उपयोग करके आपकी स्कीमा बनाने में सक्षम था। नया FK जोड़ते समय इसने तीन समग्र प्राथमिक कुंजी कॉलम को पहले से भर दिया था। मैं यह सुनिश्चित करने के लिए सावधान था कि एफके में दो कॉलम जोड़ने से पहले वे सभी खाली हो गए थे। हो सकता है कि SSMS ने सोचा हो कि रिक्त पंक्तियों में से एक में अभी भी डेटा है।
संपादित करें:बस एक और विचार था, एसएसएमएस किसी तालिका को संपादित करते समय किए गए किसी भी बदलाव को कैशिंग करने के लिए जाना जाता है। उदाहरण के लिए, यदि आप दो तालिकाओं को संशोधित करने के लिए जाते हैं और दोनों संपादन विंडो खुली हैं। फिर आप पीके को एक विंडो में बदलते हैं और फिर इसे दूसरी विंडो में संदर्भित करने का प्रयास करते हैं, यह त्रुटि होगी क्योंकि इसने कैश किया है कि विंडो पहली बार खोले जाने पर पहली तालिका के लिए स्कीमा क्या था।
यहाँ मेरा जनरेट किया गया डीडीएल है:
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])