Ich habe einen SQL Server 2012 db mit einem Fremdschlüssel, die Countries.CountryID = States.CountryID
verweistSQL NO CHECK FOREIGN KEY nach Daten, die erneute Aktivierung Abfrageoptimierer
I Countries
Tabelle neu erstellen benötigt, so lasse ich diesen Fremdschlüssel von den States
Tabelle (sonst wäre es mir nicht erlauben, Länder DROP)
Nachdem ich das tun, ich möchte den FK auf States
neu erstellen, aber es erlaubt mir nicht zu, es sei denn ich NO CHECK
als solche angegeben werden:
ALTER TABLE States
WITH NOCHECK
ADD CONSTRAINT FK_StatesCountries FOREIGN KEY (CountryID) REFERENCES Countries(CountryID)
GO
Ich habe zuerst nicht bemerkt, dass einige der Reihen von Staaten CountryID
hatten, die keinen passenden Countries.CountryID
Rekord hatten. Offensichtlich erlaubte mir WITH NOCHECK
, ohne Fehler fortzufahren.
Jetzt SQLServer mit dieser FK als "nicht vertrauenswürdig" markieren, MSDN sagt, Abfrage-Optimierer wieder zu aktivieren, indem Sie alle Einschränkungen überprüfen. Warum gibt mir die folgende Zeile KEINE Fehlermeldung, obwohl einige Länder eine ungültige CountryID haben?
ALTER TABLE States
CHECK CONSTRAINT ALL
GO
Ich würde denken, das sollte einen Fehler ausgelöst haben.
Perfekt, danke! wird die Antwort in 9 Minuten markieren – parliament