sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan får du overordnet tabel, referencetabel, navn på fremmednøglebegrænsning og kolonner i SQL Server - SQL Server / TSQL vejledning del 71

Scenarie:

Du arbejder som SQL Server-udvikler. Du bliver bedt om at angive forespørgslen, der skal returnere alle de overordnede tabeller, referencetabeller, Foreign Key Constraints og Columns brugt i Foreign Key Constraint definition.

Løsning:

Vi kan bruge systemvisningerne til at indsamle disse oplysninger. I vores forespørgsel nedenfor vil vi bruge tre

systemvisninger
sys.foreign_keys
sys.foreign_key_columns
sys.columns

til at svare forspørgelsen. Da vi kan have sammensatte primærnøglekolonner brugt i Foreign Key Constraint, har jeg brugt FOR XML Path til at sammenkæde rækker i kolonne, så jeg kan give en liste over kolonner i en enkelt række.

;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


Jeg udførte ovenstående script på en af ​​mine databaser, og her er output med skemanavn, overordnet tabelnavn, referencetabelnavn, navn på fremmednøglebegrænsning, overordnet kolonneliste og referencekolonneliste brugt i begrænsning.
Sådan får du overordnet tabel, referencetabel, navn på fremmednøglebegrænsning, kolonneliste i SQL Server


Videodemo:Sådan får du primær nøgletabel, udenlandsk nøgletabel og begrænsningsnavn i SQL Server

  1. Algoritme til at undgå SQL-injektion på MSSQL Server fra C#-kode?

  2. Sådan fungerer DAYOFMONTH() i MariaDB

  3. Hvordan opretter man en MySQL hierarkisk rekursiv forespørgsel?

  4. Sådan ÆNDRES Tabelværdiparameteren