Scénář:
Pracujete jako SQL Server Developer, budete požádáni o zadání dotazu, který by měl vrátit všechny nadřazené tabulky, referenční tabulky, omezení cizího klíče a sloupce použité v definici omezení cizího klíče.Řešení:
Ke shromáždění těchto informací můžeme použít systémové pohledy. V našem níže uvedeném dotazu použijeme k odpovědi třisystémová zobrazení
sys.foreign_keys
sys.foreign_key_columns
sys.columns
požadavek. Protože v omezení cizího klíče můžeme použít složené sloupce primárního klíče, použil jsem FOR XML Path ke zřetězení řádků do sloupce, abych mohl poskytnout seznam sloupců v jednom řádku.
;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
Spustil jsem výše uvedený skript na jedné ze svých databází a zde je výstup s názvem schématu, názvem nadřazené tabulky, názvem odkazované tabulky, názvem omezení cizího klíče, seznamem nadřazených sloupců a seznamem referenčních sloupců použitých v omezení.
Jak získat nadřazenou tabulku, referenční tabulku, název omezení cizího klíče, seznam sloupců na serveru SQL |
Video ukázka:Jak získat tabulku primárních klíčů, tabulku cizích klíčů a název omezení na serveru SQL