Em um servidor de edição SQL 2014 (12.0.2430.0 - ainda sem SP1) com um banco de dados no modo de compatibilidade 2012 (trabalhando para alternar para 2014 ...), tenho um punhado de objetos de chave estrangeira que são marcados de forma consistente not trusted
no banco de dados . Soltei e os recriei sem NOCHECK
opções, mas em 5 a 10 minutos eles não são mais confiáveis e, se eu gerar um CREATE
script, ele sairá como:
ALTER TABLE [dbo].[Points] WITH NOCHECK
ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO
O script de criação que está sendo usado é:
ALTER TABLE [dbo].[Points]
ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO
ALTER TABLE [dbo].[Points] CHECK CONSTRAINT [FK_BadgeId]
GO
Não há replicação, não há ferramentas de terceiros e estou monitorando todas as instruções DDL no banco de dados para que não seja outro usuário.
Eu sou capaz de verificar bem as restrições (usando WITH CHECK CHECK
em cada uma), mas elas ainda não são confiáveis pouco depois. Somente os trabalhos de manutenção executados são da Ola no início da manhã e isso acontece ao longo do dia.
Atualizar:
Então, depois de alguns traços para diminuir as possibilidades, parece que um BULK INSERT
pode estar causando a FK
falta de confiança. Esta pergunta do msdn afirma que esta é uma rota válida para a chave não ser confiável, que é a primeira vez que ouvi falar dela.
Portanto, minha pergunta agora é: existe uma estratégia alternativa para o uso BULK INSERT
que possa manter o is_trusted
status de chave estrangeira ? Ele está sendo executado no contexto de um aplicativo em execução várias vezes por hora. Eu poderia fazer com que os desenvolvedores agrupassem suas instruções de inserção em vez disso, mas eu preferiria não usar ultimato BULK INSERT
se não fosse necessário.
SqlBulkCopy
o mesmo efeito, mas há (pelo menos agora) uma opção para fazer a cópia em massa enquanto ainda verifica as restrições - o que significa que o recurso de cópia em massa pode fazer a verificação principal, provavelmente o bcp tem alguma opção para ativar aquele. Quem quer que tenha feito o modo sem verificação, o padrão precisa ser perfurado na cara.