На сервере редакции SQL 2014 (12.0.2430.0 - пока нет SP1) с базой данных в режиме совместимости 2012 (работающей над его переключением на 2014 ...) у меня есть несколько объектов внешнего ключа, которые последовательно помечены как not trusted
в базе данных , Я удалил и воссоздал их без NOCHECK
параметров, но через 5-10 минут они снова становятся недоверенными, и если я создаю CREATE
сценарий, он выглядит так:
ALTER TABLE [dbo].[Points] WITH NOCHECK
ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO
Используемый скрипт создания:
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
Нет репликации, нет сторонних инструментов, и я отслеживаю все операторы DDL в базе данных, поэтому это не другой пользователь.
Я в состоянии проверить ограничения хорошо (используя WITH CHECK CHECK
на каждом), но они все еще становятся ненадежными вскоре после этого. Только работы по обслуживанию выполняются Олой в начале утра, и это происходит в течение дня.
Обновить:
Таким образом, после пары следов, чтобы сузить возможности, кажется, что это BULK INSERT
может стать причиной FK
недоверия. Этот вопрос MSDN утверждает, что это правильный путь для ключа, чтобы стать ненадежным, который является первым, что я услышал об этом.
Итак, мой вопрос сейчас заключается в том, существует ли альтернативная стратегия использования, BULK INSERT
которая может поддерживать is_trusted
статус внешнего ключа ? Он выполняется в контексте приложения, работающего несколько раз в час. Я мог бы предложить разработчикам пакетировать свои операторы вставки вместо этого, но я бы предпочел не ставить ультиматум на использование, BULK INSERT
если мне не нужно.
SqlBulkCopy
с тем же эффектом, но есть (по крайней мере, сейчас) опция для массового копирования при проверке ограничений - это означает, что средство массового копирования может выполнять основную проверку, скорее всего, у bcp есть возможность включить который. Кто бы ни сделал режим без проверки по умолчанию, нужно ударить по лицу.