Связи таблиц SQL Server - PullRequest
       2

Связи таблиц SQL Server

4 голосов
/ 07 сентября 2011

SQL Server Mgmt Studio 2005: кто-нибудь может помочь мне понять, как просматривать и распечатывать связи между таблицами, показывая столбцы в таблицах.Я сделал это много лет назад и несколько дней изо всех сил пытался сделать это снова.

Ответы [ 4 ]

7 голосов
/ 07 сентября 2011

Щелкните правой кнопкой мыши на имени базы данных, разверните «Диаграммы базы данных» и выберите: «Новая диаграмма базы данных».

3 голосов
/ 07 сентября 2011

Вам необходимо создать и отредактировать диаграмму базы данных, см. Это Приступая к работе с диаграммами базы данных SQL Server и / или Проектирование диаграмм базы данных

вы можете сделать этоа также с запросом: SQL SERVER - запрос на отображение отношений внешнего ключа и имени ограничения для каждой таблицы в базе данных

, вот запрос, который получит PK, Check Constraints,и FK в и из @TableName с ограничениями из нескольких столбцов в списке через запятую:

DECLARE @TableName varchar(250)
SET @TableName='YourTable'
;WITH AllInfo AS
(
SELECT
    tc.TABLE_NAME,tc.CONSTRAINT_NAME, ccu.COLUMN_NAME
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS                  tc
        INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE  ccu ON ccu.TABLE_NAME = tc.TABLE_NAME AND ccu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
    WHERE tc.TABLE_NAME =@TableName
UNION
SELECT
    FK.TABLE_NAME,C.CONSTRAINT_NAME,CU.COLUMN_NAME
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS      C
        INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
        INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
        INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE  CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
        INNER JOIN (SELECT i1.TABLE_NAME, i2.COLUMN_NAME
                        FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS          i1
                            INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
                            WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
                   ) PT ON PT.TABLE_NAME = PK.TABLE_NAME
        WHERE PK.TABLE_NAME=@TableName
)
SELECT DISTINCT
    t1.TABLE_NAME,t1.CONSTRAINT_NAME
        ,STUFF(
                   (SELECT
                        ', ' + t2.COLUMN_NAME
                        FROM AllInfo t2
                        WHERE t1.TABLE_NAME=t2.TABLE_NAME AND t1.CONSTRAINT_NAME=t2.CONSTRAINT_NAME
                        ORDER BY t2.COLUMN_NAME
                        FOR XML PATH(''), TYPE
                   ).value('.','varchar(max)')
                   ,1,2, ''
              ) AS ColumnNames
    FROM AllInfo t1
    ORDER BY 1,2,3
0 голосов
/ 25 февраля 2019

вы можете использовать следующий скрипт, чтобы найти все отношения fk, pk для конкретной таблицы

DECLARE @tablename VARCHAR(100)
SET @tablename='xxxxxxx'
Select 'Referenced by FK table' AS Type,  FK.TABLE_SCHEMA, FK.TABLE_NAME AS 'FK_TABLE_NAME' ,cu.COLUMN_NAME AS 'FK_ReferencingColumn',PK.TABLE_NAME AS 'PK_TABLE_NAME',
 ku.COLUMN_NAME AS 'PK_ReferencedColumn'
From INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS As RC
    Join INFORMATION_SCHEMA.TABLE_CONSTRAINTS As PK
        On PK.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME
    Join INFORMATION_SCHEMA.TABLE_CONSTRAINTS As FK
        On FK.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
   JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu
   ON cu.CONSTRAINT_NAME = Rc.CONSTRAINT_NAME
     JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE ku
ON ku.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME
Where 
    PK.TABLE_NAME = @tablename
UNION  
SELECT 'Referencing PK table' AS Type, FK.TABLE_SCHEMA, FK.TABLE_NAME AS 'FK_TABLE_NAME' ,cu.COLUMN_NAME AS 'FK_ReferencingColumn',PK.TABLE_NAME AS 'PK_TABLE_NAME',
 ku.COLUMN_NAME AS 'PK_ReferencedColumn'
From INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS As RC
    Join INFORMATION_SCHEMA.TABLE_CONSTRAINTS As PK
        On PK.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME
    Join INFORMATION_SCHEMA.TABLE_CONSTRAINTS As FK
        On FK.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
   JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cu
   ON cu.CONSTRAINT_NAME = Rc.CONSTRAINT_NAME
     JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE ku
ON ku.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME
Where 
     fk.TABLE_NAME = @tablename
0 голосов
/ 07 сентября 2011

Вы можете создать диаграмму базы данных и добавить в нее все свои таблицы. Это будет графическое представление, если вы этого хотите.

...