Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como tornar as restrições de chave estrangeira confiáveis?


Com base em seus exemplos, também tentei:
  • Solte e recrie a chave estrangeira.
  • Solte e recrie a tabela.

Então notei algo no comando:
NOT FOR REPLICATION

Parece que se uma restrição é criada com NOT FOR REPLICATION, ela sempre não é confiável.

Citando de Manuais Online :

Parece que o IS_NOT_TRUSTED configuração é relevante apenas para replicação influenciado por IS_NOT_FOR_REPLICATION . Eu acho que desde que a restrição seja aplicada no servidor em que você está trabalhando, deve estar tudo bem. Então fui em frente e confirmei:
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.

Se você ainda quiser ver IS_NOT_TRUSTED = 0 para ficar tranquilo, apenas recrie a chave estrangeira sem NOT FOR REPLICATION .

Caso você esteja se perguntando, verifiquei o mesmo efeito nas restrições CHECK também.