Basierend auf Ihren Beispielen habe ich auch versucht:
- Den Fremdschlüssel löschen und neu erstellen.
- Tabelle löschen und neu erstellen.
Dann ist mir etwas im Befehl aufgefallen:
NOT FOR REPLICATION
Es scheint, wenn eine Einschränkung mit NOT FOR REPLICATION erstellt wird, wird ihr immer nicht vertraut.
Zitat aus Books Online :
Es sieht aus wie IS_NOT_TRUSTED
Die Einstellung ist nur für die Replikation relevant beeinflusst von IS_NOT_FOR_REPLICATION
. Ich denke, solange die Einschränkung auf dem Server erzwungen wird, an dem Sie arbeiten, sollte es in Ordnung sein. Also ging ich weiter und bestätigte es:
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.
Wenn Sie immer noch IS_NOT_TRUSTED = 0
sehen möchten Erstellen Sie zur Sicherheit einfach den Fremdschlüssel ohne NOT FOR REPLICATION
neu .
Falls Sie sich fragen, ich habe den gleichen Effekt auch auf CHECK-Einschränkungen überprüft.