Eu tenho uma tabela com uma restrição que possui um registro existente que viola essa restrição. Embora isso seja possível se alguém aplicasse a restrição sem uma verificação e depois que os dados de violação fossem inseridos, como seria possível que o sinalizador is_not_trusted fosse zero na tabela sys.foreign_keys?
Esta é a situação que tenho atualmente, uma violação de dados em uma chave estrangeira onde o sinalizador is_not_trusted é zero. Eu pensei que era essencialmente o sinalizador que confirma se a restrição foi aplicada 'religiosamente'.
Obrigado
Dos comentários:
Isso pode acontecer devido ao valor escrito fisicamente na página estar incorreto (corrupção de dados). Ou um bug no produto (provavelmente menos provável, mas possível ). Corra
DBCC CHECKDB
para ver se isso encontra algum problema. – Martin Smith 18 de junho de 2016 às 0:07 3Junto com o comentário de Martin - os dados entraram na tabela via
MERGE
? Aqui está um bug (fechado como "Won't Fix") que pode fazer exatamente isso e outro bug (também "Won't Fix") . Se você precisar de mais motivos para evitarMERGE
, consulte este artigo . – Aaron Bertrand ♦ 18 de junho de 2016 às 3:21