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 trustedno banco de dados . Soltei e os recriei sem NOCHECKopções, mas em 5 a 10 minutos eles não são mais confiáveis e, se eu gerar um CREATEscript, 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 CHECKem 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 INSERTpode estar causando a FKfalta 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 INSERTque possa manter o is_trustedstatus 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 INSERTse não fosse necessário.
SqlBulkCopyo 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.