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 trusted
in der Datenbank markiert sind . Ich habe sie ohne NOCHECK
Optionen gelöscht und neu erstellt , aber innerhalb von 5-10 Minuten werden sie wieder nicht mehr vertrauenswürdig. Wenn ich ein CREATE
Skript 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 CHECK
jeweils 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 INSERT
dazu führen, dass das FK
nicht 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 INSERT
ob 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 INSERT
wenn ich nicht muss.
SqlBulkCopy
mit 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.