Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie macht man Fremdschlüsseleinschränkungen vertrauenswürdig?

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.