Szenario:
Sie arbeiten als SQL Server-Entwickler und werden gebeten, die Abfrage bereitzustellen, die alle übergeordneten Tabellen, Referenztabellen, Fremdschlüsseleinschränkungen und Spalten zurückgeben soll, die in der Fremdschlüsseleinschränkungsdefinition verwendet werden.Lösung:
Wir können die Systemansichten verwenden, um diese Informationen zu sammeln. In unserer Abfrage unten verwenden wir dreiSystemansichten
sys.foreign_keys
sys.foreign_key_columns
sys.columns
zur Beantwortung die Anfrage. Da wir zusammengesetzte Primärschlüsselspalten haben können, die in Foreign Key Constraint verwendet werden, habe ich FOR XML Path verwendet, um Zeilen in Spalten zu verketten, sodass ich eine Liste von Spalten in einer einzelnen Zeile bereitstellen kann.
;With CTE_FK AS ( SELECT Schema_Name(Schema_id) as TableSchemaName, object_name(FK.parent_object_id) ParentTableName, object_name(FK.referenced_object_id) ReferenceTableName, FK.name AS ForeignKeyConstraintName,c.name as ReferencedColumnList, cf.name as ParentColumnName FROM sys.foreign_keys AS FK INNER JOIN sys.foreign_key_columns AS FKC ON FK.OBJECT_ID = FKC.constraint_object_id INNER JOIN sys.columns c on c.OBJECT_ID = FKC.referenced_object_id AND c.column_id = FKC.referenced_column_id INNER JOIN sys.columns cf on cf.OBJECT_ID = FKC.parent_object_id AND cf.column_id = FKC.parent_column_id ) Select TableSchemaName, ParentTableName, ReferenceTableName, ForeignKeyConstraintName,stuff(( Select ','+ParentColumnName from CTE_FK i where i.ForeignKeyConstraintName=o.ForeignKeyConstraintName and i.TableSchemaName=o.TableSchemaName and i.ParentTableName=o.ParentTableName and i.ReferenceTableName=o.ReferenceTableName for xml path('')), 1, 1, '') ParentColumnList ,stuff(( Select ','+ReferencedColumnList from CTE_FK i where i.ForeignKeyConstraintName=o.ForeignKeyConstraintName and i.TableSchemaName=o.TableSchemaName and i.ParentTableName=o.ParentTableName and i.ReferenceTableName=o.ReferenceTableName for xml path('')), 1, 1, '') RefColumnList from CTE_FK o group by tableSchemaName, ParentTableName, ReferenceTableName, ForeignKeyConstraintName
Ich habe das obige Skript auf einer meiner Datenbanken ausgeführt und hier ist die Ausgabe mit dem Schemanamen, dem Namen der übergeordneten Tabelle, dem Namen der referenzierten Tabelle, dem Namen der Fremdschlüsselbeschränkung, der Liste der übergeordneten Spalten und der in der Beschränkung verwendeten Referenzspaltenliste.
Wie man übergeordnete Tabelle, referenzierte Tabelle, Namen der Fremdschlüsselbeschränkung, Spaltenliste in SQL Server erhält |
Video-Demo:So erhalten Sie eine Primärschlüsseltabelle, eine Fremdschlüsseltabelle und einen Beschränkungsnamen in SQL Server