In un server SQL 2014 Edition (12.0.2430.0 - ancora nessun SP1) con un database in modalità compatibilità 2012 (lavorando per passare al 2014 ...) Ho una manciata di oggetti chiave esterna che sono costantemente contrassegnati come not trustednel database . Li ho rilasciati e ricreati senza NOCHECKopzioni, ma entro 5-10 minuti diventano nuovamente non attendibili e se generi uno CREATEscript viene visualizzato come:
ALTER TABLE [dbo].[Points] WITH NOCHECK
ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO
Lo script di creazione utilizzato è:
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
Non c'è replica, non ci sono strumenti di terze parti e sto monitorando tutte le istruzioni DDL sul database, quindi non è un altro utente.
Sono in grado di controllare bene i vincoli (usando WITH CHECK CHECKsu ciascuno) ma diventano poco attendibili poco dopo. Solo i lavori di manutenzione in esecuzione sono di Ola all'inizio del mattino e questo accade durante il giorno.
Aggiornare:
Quindi, dopo un paio di tracce per restringere le possibilità, sembra che un BULK INSERTpotrebbe FKnon fidarsi. Questa domanda msdn afferma che questa è una strada valida per rendere la chiave non affidabile, che è la prima volta che ne ho sentito parlare.
Quindi la mia domanda ora è: esiste una strategia alternativa all'utilizzo in BULK INSERTgrado di mantenere lo is_trustedstato di chiave esterna ? Viene eseguito nel contesto di un'applicazione in esecuzione più volte all'ora. Potrei avere gli sviluppatori in batch le loro istruzioni di inserimento, ma preferirei non mettere un ultimatum sull'uso BULK INSERTse non dovessi.
SqlBulkCopycon lo stesso effetto, ma c'è (almeno ora) un'opzione per fare la copia in blocco controllando ancora i vincoli - il che significa che la funzione di copia in blocco può fare il controllo in linea di principio, molto probabilmente bcp ha qualche opzione per abilitare quello. Chiunque abbia impostato la modalità di non controllo sull'impostazione predefinita deve essere preso a pugni in faccia.