sql >> Databasteknik >  >> RDS >> Sqlserver

Hur gör man begränsningar för främmande nyckel pålitliga?

Baserat på dina exempel har jag även provat:

  • Släpp och återskapa den främmande nyckeln.
  • Släpp och återskapa tabellen.

Sedan märkte jag något i kommandot:

NOT FOR REPLICATION

Det verkar som om en begränsning skapas med INTE FÖR REPLIKATION, att den alltid inte är betrodd.

Citerar från Böcker online :

Det ser ut som IS_NOT_TRUSTED inställningen är endast relevant för replikering påverkas av IS_NOT_FOR_REPLICATION . Jag antar att så länge begränsningen upprätthålls på servern du arbetar på, borde det vara bra. Så jag gick vidare och bekräftade det:

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.

Om du fortfarande vill se IS_NOT_TRUSTED = 0 för sinnesfrid, återskapa bara den främmande nyckeln utan NOT FOR REPLICATION .

Om ni undrar så har jag verifierat samma effekt på CHECK-begränsningar också.




  1. Visar kommaseparerade rullgardinsvärden från kolumn i databasen

  2. PHP:Sortera MySQL-resultat till flerdimensionell array

  3. Execute Immediate misslyckas även med CREATE-tabellbeviljande

  4. Hur skickar jag List från Java till Oracle Procedur?