Auf einem SQL 2014 Edition-Server (12.0.2430.0 - noch kein SP1) mit einer Datenbank im 2012-Kompatibilitätsmodus (arbeitet daran, sie auf 2014 umzustellen ...) habe ich eine Handvoll Fremdschlüsselobjekte, die konsistent als not trustedin der Datenbank markiert sind . Ich habe sie ohne NOCHECKOptionen gelöscht und neu erstellt , aber innerhalb von 5-10 Minuten werden sie wieder nicht mehr vertrauenswürdig. Wenn ich ein CREATESkript generiere, wird Folgendes ausgegeben :
ALTER TABLE [dbo].[Points] WITH NOCHECK
ADD CONSTRAINT [FK_BadgeId] FOREIGN KEY([BadgeId])
REFERENCES [dbo].[Badge] ([Id])
GO
Das verwendete Erstellungsskript lautet:
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
Es gibt keine Replikation, es gibt keine Tools von Drittanbietern und ich überwache alle DDL-Anweisungen in der Datenbank, damit es sich nicht um einen anderen Benutzer handelt.
Ich kann die Einschränkungen gut überprüfen ( WITH CHECK CHECKjeweils verwenden), aber sie werden kurz darauf immer noch nicht vertrauenswürdig. Nur Wartungsarbeiten, die ausgeführt werden, werden am frühen Morgen von Ola ausgeführt, und dies geschieht den ganzen Tag über.
Aktualisieren:
Nach ein paar Spuren, um die Möglichkeiten einzugrenzen, scheint es, als würde a BULK INSERTdazu führen, dass das FKnicht mehr vertrauenswürdig wird. Diese msdn-Frage besagt, dass dies eine gültige Route ist, auf der der Schlüssel nicht mehr vertrauenswürdig ist. Dies ist die erste, von der ich gehört habe.
Meine Frage ist nun, BULK INSERTob es eine alternative Strategie zur Verwendung gibt , mit der der Fremdschlüsselstatus beibehalten werden kann is_trusted. Es wird im Kontext einer Anwendung ausgeführt, die mehrmals pro Stunde ausgeführt wird. Ich könnte die Entwickler stattdessen ihre Einfügeanweisungen stapeln lassen, aber ich würde es vorziehen, kein Ultimatum für die Verwendung zu stellen, BULK INSERTwenn ich nicht muss.
SqlBulkCopymit dem gleichen Effekt verwendet, aber es gibt (zumindest jetzt) eine Option zum Erstellen der Massenkopie, während die Einschränkungen weiterhin überprüft werden. Dies bedeutet, dass die Massenkopierfunktion das Einchecken im Prinzip durchführen kann. Wahrscheinlich hat bcp eine Option zum Aktivieren Das. Wer den Nichtprüfungsmodus zum Standard gemacht hat, muss ins Gesicht geschlagen werden.