Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak uzyskać tabelę nadrzędną, tabelę referencyjną, nazwę ograniczenia klucza obcego i kolumny w programie SQL Server — samouczek SQL Server / TSQL, część 71

Scenariusz:

Pracujesz jako programista SQL Server, zostaniesz poproszony o dostarczenie zapytania, które powinno zwrócić wszystkie tabele nadrzędne, tabele referencyjne, ograniczenia klucza obcego i kolumny użyte w definicji ograniczenia klucza obcego.

Rozwiązanie:

Do zbierania tych informacji możemy wykorzystać widoki systemowe. W poniższym zapytaniu użyjemy trzech

widoków systemowych
sys.foreign_keys
sys.foreign_key_columns
sys.columns

do odpowiedzi prośba. Ponieważ możemy mieć złożone kolumny klucza podstawowego używane w ograniczeniu klucza obcego, użyłem FOR XML Path do łączenia wierszy w kolumnę, dzięki czemu mogę podać listę kolumn w jednym wierszu.

;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


Wykonałem powyższy skrypt na jednej z moich baz danych, a oto wyniki z nazwą schematu, nazwą tabeli nadrzędnej, nazwą tabeli, do której istnieje odwołanie, nazwą ograniczenia klucza obcego, listą nadrzędnych kolumn i listą kolumn odniesienia używanych w ograniczeniu.
Jak uzyskać tabelę nadrzędną, tabelę odniesienia, nazwę ograniczenia klucza obcego, listę kolumn w SQL Server


Wideo demonstracyjne:Jak uzyskać tabelę kluczy głównych, tabelę kluczy obcych i nazwę ograniczenia w programie SQL Server

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz relację w SQL Server 2017

  2. Oblicz sumę bieżącą / bilans bieżący

  3. Jak uniknąć pojedynczego cytatu w programie SQL Server?

  4. Jak utworzyć tabelę w SQL Server za pomocą zapytania

  5. Jak wstawić listę C# do bazy danych za pomocą Dapper.NET?