sql >> Databasteknik >  >> RDS >> Sqlserver

Hur får man överordnad tabell, referenstabell, namn på främmande nyckelbegränsningar och kolumner i SQL Server - SQL Server / TSQL självstudie del 71

Scenario:

Du arbetar som SQL Server-utvecklare, du ombeds att tillhandahålla frågan som ska returnera alla överordnade tabeller, referenstabeller, Foreign Key Constraints och Kolumner som används i Foreign Key Constraint definition.

Lösning:

Vi kan använda systemvyerna för att samla in denna information. I vår fråga nedan kommer vi att använda tre

systemvyer
sys.foreign_keys
sys.foreign_key_columns
sys.columns

för att svara förfrågan. Eftersom vi kan ha sammansatta primärnyckelkolumner som används i Foreign Key Constraint, har jag använt FOR XML Path för att sammanfoga rader till kolumner så att vi kan tillhandahålla en lista över kolumner i en rad.

;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


Jag körde ovanstående skript på en av mina databaser och här är utdata med Schema Name, Parent Table Name, Refered Tabell Name, Foreign Key Constraint Name, Parent Column List och Reference Column List som används i Constraint.
Hur får man överordnad tabell, refererad tabell, namn på främmande nyckelbegränsningar, kolumnlista i SQL Server


Videodemo :Hur man får primärnyckeltabell, främmande nyckeltabell och begränsningsnamn i SQL Server

  1. SQL Server – Dissekera internerna i sp_spaceused

  2. Skapar du en loggningshanterare för att ansluta till Oracle?

  3. MySQL:är en SELECT-sats skiftlägeskänslig?

  4. När ska jag använda CROSS APPLY över INNER JOIN?