Ich versuche, eine Tabelle zu löschen, erhalte jedoch die folgende Meldung:
Meldung 3726, Ebene 16,
Status 1, Zeile 3 Das Objekt 'dbo.UserProfile' konnte nicht gelöscht werden, da es durch eine FOREIGN KEY-Einschränkung referenziert wird.
Meldung 2714, Ebene 16,
Status 6, Zeile 2 In der Datenbank befindet sich bereits ein Objekt mit dem Namen 'UserProfile'.
Ich habe mich mit SQL Server Management Studio umgesehen, kann die Einschränkung jedoch nicht finden. Wie kann ich die Fremdschlüsseleinschränkungen herausfinden?
sql
sql-server
sql-server-2008
marc_s
quelle
quelle
Worth noticing:
Die Antwort von @LittleSweetSeas gibt Informationen zu den Fremdschlüsseln für eine bestimmte referenzierte Tabelle zurück , jedoch die Antwortdetails von @ Gayathri-Varma für eine bestimmte übergeordnete Tabelle . Beide sind in unterschiedlichen Zusammenhängen nützlich und beide gewinnen ihr eigenes Rennen :-)Antworten:
Hier ist es:
Auf diese Weise erhalten Sie den Namen der referenzierenden Tabelle und der Spalte.
Bearbeitet, um sys.tables anstelle von generischen sys.objects gemäß Kommentarvorschlag zu verwenden. Danke, marc_s
quelle
sys.tables
alssys.objects
INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id
mitINNER JOIN sys.tables t ON t.OBJECT_ID = fc.referenced_object_id
Eine andere Möglichkeit besteht darin, die Ergebnisse von zu überprüfen
(oder markieren Sie einfach den angegebenen Tabellennamen und drücken Sie ALT + F1)
Mit der Zeit habe ich mich entschlossen, meine Antwort zu verfeinern. Unten sehen Sie einen Screenshot der Ergebnisse
sp_help
. A hat für dieses Beispiel die AdventureWorksDW2012-Datenbank verwendet. Dort gibt es zahlreiche gute Informationen, und was wir suchen, ist ganz am Ende - grün hervorgehoben:quelle
Versuche dies
quelle
name
Wert ist ein interner Name (Methinks) und nicht der tatsächliche Spaltenname in der übergeordneten Tabelle. Wie kann man das beheben?ParentTableName
immer das gleiche ist wie dasTablename
in der where-Klausel angegebene ' ' (falls enthalten). Dies kann beabsichtigt sein und ist nützlicher, wenn mehr als eine Tabelle abgefragt wird .Ich fand diese Antwort ziemlich einfach und tat den Trick für das, was ich brauchte: https://stackoverflow.com/a/12956348/652519
Verwenden Sie diese Zusammenfassung, um eine Zusammenfassung des Links zu erhalten:
Schnell und einfach. Ich konnte ziemlich schnell alle Fremdschlüsseltabellen, entsprechenden Spalten und Fremdschlüsselnamen von 15 Tabellen finden.
Wie unten in @mdisibio angegeben, finden Sie hier einen Link zur Dokumentation, in der die verschiedenen Parameter aufgeführt sind, die verwendet werden können: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp- fkeys-transact-sql
quelle
EXEC sp_fkeys 'Payroll', 'accounting'
Ich verwende dieses Skript, um alle Details zum Fremdschlüssel zu finden. Ich benutze INFORMATION.SCHEMA. Unten ist ein SQL-Skript:
quelle
Wenn Sie im Objekt-Explorer-Fenster über SSMS wechseln möchten, klicken Sie mit der rechten Maustaste auf das Objekt, das Sie löschen möchten, und zeigen Sie Abhängigkeiten an.
quelle
Hier ist der beste Weg, um die Fremdschlüsselbeziehung in allen Datenbanken herauszufinden.
und noch ein Weg
quelle
exec sp_helpconstraint 'Table Name'
ist die einzige, die für mich überhaupt Zeilen zurückgibt. Der Name der Kontraint ist jedoch Kauderwelsch.PRIMARY KEY (clustered) PK__org_soft__3213E83FE6B07364
quelle
- Das Folgende kann Ihnen mehr von dem geben, wonach Sie suchen:
quelle
Sie können auch alle Informationen über die
Foreign Keys
Antwort von @LittleSweetSeas zurückgeben:quelle
In SQL Server Management Studio können Sie einfach mit der rechten Maustaste auf die Tabelle im Objekt-Explorer klicken und "Abhängigkeiten anzeigen" auswählen. Dies würde Ihnen einen guten Ausgangspunkt geben. Es werden Tabellen, Ansichten und Prozeduren angezeigt, die auf die Tabelle verweisen.
quelle
Versuchen Sie die folgende Abfrage.
Dies gibt den Einschränkungsnamen, die Spaltennamen an, auf die verwiesen wird, und Tabellen, die von der Einschränkung abhängen, sind dort vorhanden.
quelle
Mit dieser Abfrage können Sie
Foreign key
Konstanten anzeigen :Entnommen aus http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table- in der Datenbank /
quelle
Der einfachste Weg , um
Primary Key
undForeign Key
für eine Tabelle ist:quelle
Erweitern Sie im Objekt-Explorer die Tabelle und die Schlüssel:
quelle