2012互換モードのデータベースを備えたSQL 2014エディションサーバー(12.0.2430.0-SP1はまだありません)(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
それぞれで使用)が、その後すぐに信頼できなくなります。実行される保守ジョブのみが午前AMのOlaであり、これは1日中行われます。
更新:
したがって、可能性を絞り込むためにいくつかのトレースを行った後、それBULK INSERT
が原因でFK
が信頼されなくなる可能性があります。このmsdnの質問は、これがキーが信頼されなくなるための有効なルートであることを示しています。これは私が聞いた最初のルートです。
だから私の質問は、BULK INSERT
外部キーのis_trusted
ステータスを維持できる使用する代替戦略はありますか?1時間に数回実行されるアプリケーションのコンテキストで実行されています。代わりに、開発者に挿入ステートメントをバッチ処理させることもできますが、BULK INSERT
必要がない場合は、最終通告を使用しないようにします。
SqlBulkCopy
同じ効果で使用していましたが、(少なくとも今は)制約を確認しながら一括コピーを実行するオプションがあります-つまり、一括コピー機能は基本的にチェックを実行でき、おそらくbcpには有効にするオプションがありますそれ。非チェックモードをデフォルトにした人は誰でも顔をパンチする必要があります。