आपके उदाहरणों के आधार पर, मैंने भी कोशिश की है:
- विदेशी कुंजी को छोड़ें और पुन:बनाएँ।
- तालिका को छोड़ें और पुन:बनाएँ।
तब मैंने कमांड में कुछ देखा:
NOT FOR REPLICATION
ऐसा लगता है कि यदि प्रतिकृति के लिए नहीं के साथ एक बाधा बनाई गई है, तो उस पर हमेशा भरोसा नहीं किया जाता है।
बुक्स ऑनलाइन से उद्धरण :
ऐसा लगता है कि IS_NOT_TRUSTED
सेटिंग <स्ट्राइक>केवल प्रतिकृति के लिए प्रासंगिक हैस्ट्राइक> IS_NOT_FOR_REPLICATION
. से प्रभावित . मुझे लगता है कि जब तक आप जिस सर्वर पर काम कर रहे हैं, उस पर बाधा लागू है, यह ठीक होना चाहिए। इसलिए मैंने आगे बढ़कर इसकी पुष्टि की:
SELECT name, is_disabled, is_not_trusted
FROM sys.foreign_keys
WHERE name = 'FK_Product_ProductKeyId'
name is_disabled is_not_trusted
FK_Product_ProductKeyId 0 1
INSERT INTO dbo.Sale VALUES (2, GETDATE(), 1.00)
Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Product_ProductKeyId". The conflict occurred in database "_Scratch", table "dbo.Product", column 'ProductKeyId'.
The statement has been terminated.
अगर आप अभी भी IS_NOT_TRUSTED = 0
see देखना चाहते हैं मन की शांति के लिए, बिना NOT FOR REPLICATION
. के बस विदेशी कुंजी फिर से बनाएं ।
यदि आप में से कोई सोच रहा है, तो मैंने CHECK बाधाओं पर भी उसी प्रभाव को सत्यापित किया है।