sql >> Database >  >> RDS >> Sqlserver

Hoe externe sleutelbeperkingen betrouwbaar te maken?

Op basis van jouw voorbeelden heb ik ook het volgende geprobeerd:

  • Laat de externe sleutel vallen en maak deze opnieuw.
  • Laat de tafel vallen en maak deze opnieuw.

Toen merkte ik iets op in het commando:

NOT FOR REPLICATION

Het lijkt erop dat als een beperking is gemaakt met NOT FOR REPLICATION, deze altijd niet wordt vertrouwd.

Citaat uit Books Online :

Het lijkt op de IS_NOT_TRUSTED instelling is alleen relevant voor replicatie beïnvloed door IS_NOT_FOR_REPLICATION . Ik denk dat zolang de beperking wordt gehandhaafd op de server waaraan u werkt, het goed zou moeten zijn. Dus ik ging door en bevestigde het:

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.

Als je nog steeds IS_NOT_TRUSTED = 0 . wilt zien voor gemoedsrust, maak gewoon de externe sleutel opnieuw aan zonder NOT FOR REPLICATION .

Mochten jullie het zich afvragen:ik heb hetzelfde effect ook op CHECK-beperkingen geverifieerd.




  1. bestand wordt niet geüpload in ajax php mysql

  2. hoe veilig zijn door de BOB opgestelde verklaringen?

  3. letterlijke komt niet overeen met de tekenreeksfout bij het bijwerken van de sql-tabel

  4. C# SQLConnection-pooling