2010-07-23 5 views
3

позволяет сказать, что у меня есть table1 = «Foo» и 4 других таблицы fee1, Плата 2, Плата 3, Плата 4Получить список зависимых таблиц, SQL Server 2005

теперь говорят, что первичный ключ обув является внешним ключом fee1 и Плата 2.

Учитывая имя 'foo', как я узнаю, что fee1 и fee2 имеют зависимости foriegn от foo.

Пожалуйста, помогите, запрос psuedo был бы полезен.

Тем не менее, я знаю, как определить, учитывая имя foo, как получить зависимости foriegn от ключевых foo. используя INFORMATION_SCHEMA.USAGE_KEY_COLUMN.

ответ

0

один способ, просто добавьте и TC.TABLE_NAME = 'Foo' в ИНЕКЕ

SELECT TC.CONSTRAINT_SCHEMA + '.'+ TC.TABLE_NAME AS PRIMARYKEYTABLE 
,TC.CONSTRAINT_NAME AS PRIMARYKEY 
,COALESCE(RC1.CONSTRAINT_NAME,'N/A') AS FOREIGNKEY 
,CASE WHEN TC2.TABLE_NAME IS NULL THEN 'N/A' 
ELSE TC.CONSTRAINT_SCHEMA + '.' + TC2.TABLE_NAME END AS FOREIGNKEYTABLE 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC 
LEFT JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC1 
     ON TC.CONSTRAINT_NAME =RC1.UNIQUE_CONSTRAINT_NAME 
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC2 
     ON TC2.CONSTRAINT_NAME =RC1.CONSTRAINT_NAME 
WHERE TC.CONSTRAINT_TYPE ='PRIMARY KEY' 
ORDER BY TC.TABLE_NAME,TC.CONSTRAINT_NAME,RC1.CONSTRAINT_NAME 

От Find all Primary and Foreign Keys In A Database

7

Попробуйте это в SQL Server Mgmt Студия:

SELECT 
    fk.name, 
    OBJECT_NAME(fk.parent_object_id) 'Child table' 
FROM 
    sys.foreign_keys fk 
WHERE 
    fk.referenced_object_id = OBJECT_ID('YourTableNameHEre') 

Это будут перечислены все ограничения внешнего ключа и какая таблица, из которой они идут, ссылаются на вашу таблицу YourTableNameHere.

1

Попробуйте

SELECT 
    'CONSTRAINT :' + C.Constraint_Name + ' 
    Goes FROM ' + PK.TABLE_NAME + '.' + PT.COLUMN_NAME + ' 
    To ' + FK.TABLE_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 = "YourTableName"` 
0

Я использую sp_help для обеспечения представления резюме уровня различных объектов базы данных. Когда вы указываете таблицу базы данных, она возвращает информацию о первичных ключах, ограничениях, индексах, внешних ключах и том, что они ссылаются, и какие другие таблицы имеют внешние ключи к указанному. Быстро и легко запомнить способ получения этой информации сразу.