sql >> Database >  >> RDS >> Sqlserver

Hoe de bovenliggende tabel, referentietabel, naam van de externe sleutelbeperking en kolommen in SQL Server te krijgen - SQL Server / TSQL-zelfstudie, deel 71

Scenario:

U werkt als SQL Server-ontwikkelaar, u wordt gevraagd om de query op te geven die alle bovenliggende tabellen, referentietabellen, Foreign Key Constraints en Columns moet retourneren die worden gebruikt in de definitie van Foreign Key Constraint.

Oplossing:

We kunnen de systeemweergaven gebruiken om deze informatie te verzamelen. In onze onderstaande query gebruiken we drie

systeemweergaven
sys.foreign_keys
sys.foreign_key_columns
sys.columns

om te antwoorden de aanvraag. Omdat we samengestelde primaire-sleutelkolommen kunnen hebben die worden gebruikt in Foreign Key Constraint, heb ik FOR XML Path gebruikt om rijen in kolommen samen te voegen, zodat een lijst met kolommen in één rij kan worden weergegeven.

;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


Ik heb bovenstaand script uitgevoerd in een van mijn databases en hier wordt uitgevoerd met Schemanaam, Naam bovenliggende tabel, Naam tabel waarnaar wordt verwezen, Naam externe sleutelbeperking, Lijst met bovenliggende kolommen en Lijst met referentiekolommen gebruikt in beperking.

br />
Hoe bovenliggende tabel, tabel waarnaar wordt verwezen, naam buitenlandse sleutelbeperking, lijst met kolommen in SQL Server te krijgen


Videodemo:Primaire sleuteltabel, buitenlandse sleuteltabel en beperkingsnaam in SQL Server verkrijgen

  1. SQL-query om datums tussen twee datums te selecteren

  2. MySQL-fout::'Toegang geweigerd voor gebruiker 'root'@'localhost'

  3. Wat is het doel van een Android-projectiekaart in een contentprovider?

  4. Hoe MAX() van een lege tabel te behandelen als 0 in plaats van NULL