Ich habe zwei Tabellen in zwei verschiedenen Datenbanken. In Tabelle1 (in Datenbank1) gibt es eine Spalte namens Spalte1 und es handelt sich um einen Primärschlüssel. Jetzt gibt es in Tabelle2 (in Datenbank2) eine Spalte namens Spalte2 und ich möchte sie als Fremdschlüssel hinzufügen.
Ich habe versucht, es hinzuzufügen, und es gab mir den folgenden Fehler:
Meldung 1763, Ebene 16, Status 0, Zeile 1
Datenbankübergreifende Fremdschlüsselreferenzen werden nicht unterstützt. Fremdschlüssel Database2.table2.Meldung 1750, Ebene 16, Status 0, Zeile 1 Es
konnte keine Einschränkung erstellt werden. Siehe vorherige Fehler.
Wie mache ich das, da sich die Tabellen in verschiedenen Datenbanken befinden?
Wenn Sie eine solide Integrität benötigen, haben Sie beide Tabellen in einer Datenbank und verwenden Sie eine FK-Einschränkung. Wenn sich Ihre übergeordnete Tabelle in einer anderen Datenbank befindet, hindert nichts jemanden daran, diese übergeordnete Datenbank aus einer alten Sicherung wiederherzustellen, und dann haben Sie Waisen.
Aus diesem Grund wird FK zwischen Datenbanken nicht unterstützt.
quelle
Nach meiner Erfahrung besteht der beste Weg, dies zu handhaben, wenn sich die primäre maßgebliche Informationsquelle für zwei verwandte Tabellen in zwei separaten Datenbanken befinden muss, darin, eine Kopie der Tabelle vom primären Speicherort zum sekundären Speicherort zu synchronisieren (mithilfe von T- SQL oder SSIS mit entsprechender Fehlerprüfung - Sie können eine Tabelle nicht abschneiden und neu füllen, solange sie eine Fremdschlüsselreferenz enthält. Es gibt also einige Möglichkeiten, die Katze bei der Aktualisierung der Tabelle zu häuten.
Fügen Sie dann der Tabelle eine herkömmliche FK-Beziehung an der zweiten Stelle hinzu, die praktisch eine schreibgeschützte Kopie ist.
Sie können einen Trigger oder einen geplanten Job am primären Speicherort verwenden, um die Kopie auf dem neuesten Stand zu halten.
quelle
Sie können die Prüfbedingung mit einer benutzerdefinierten Funktion verwenden, um die Prüfung durchzuführen. Es ist zuverlässiger als ein Auslöser. Es kann wie Fremdschlüssel deaktiviert und bei Bedarf wieder aktiviert werden und nach einer Datenbank2-Wiederherstellung erneut überprüft werden.
quelle
Die kurze Antwort lautet, dass SQL Server (ab SQL 2008) keine datenbankübergreifenden Fremdschlüssel unterstützt - wie in der Fehlermeldung angegeben.
Während Sie keine deklarative referenzielle Integrität (FK) haben können, können Sie dasselbe Ziel mithilfe von Triggern erreichen. Es ist ein bisschen weniger zuverlässig, weil die Logik, die Sie schreiben, möglicherweise Fehler enthält, aber es wird Sie trotzdem dorthin bringen.
Weitere Informationen finden Sie in den SQL-Dokumenten unter http://msdn.microsoft.com/en-us/library/aa258254%28v=sql.80%29.aspx. Welcher Status:
Es gibt auch eine OK-Diskussion bei SQLTeam - http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=31135
quelle
Wie die Fehlermeldung besagt, wird dies auf einem SQL Server nicht unterstützt. Die einzige Möglichkeit, die Integrität der Auffrischung sicherzustellen, besteht darin, mit Triggern zu arbeiten.
quelle