SQL Server 2000 — Запрос взаимосвязей внешнего ключа таблицы

Почти идентичен запросу отношений внешнего ключа таблицы, но для SQL Сервер 2000

Для данной таблицы «foo» мне нужен запрос для создания набора таблиц с внешними ключами, указывающими на foo.


person Macho Matt    schedule 14.01.2009    source источник


Ответы (4)


Попробуйте этот T-SQL:

select col_name(fkeyid, fkey) as column_name, object_name(rkeyid) as referenced_table_name, col_name(rkeyid, rkey) as referenced_column_name from sysforeignkeys where object_name(fkeyid) = 'tableNameHere' order by constid

Я немного переписал запрос, чтобы дать вам все другие таблицы, которые зависят от конкретной таблицы:

select object_name(fkeyid),
col_name(fkeyid, fkey) as column_name,
col_name(rkeyid, rkey) as referenced_column_name
from sysforeignkeys
where object_name(rkeyid) = 'tableNameHere'
order by constid
person alex    schedule 14.01.2009
comment
при всем уважении, кто, черт возьми, меня здесь проголосовал? Из себя. - person alex; 14.01.2009

Родители и дети

/* this will find out all of the foreign key references for a table*/

DECLARE @tableName varchar(128)
SET @tableName = 'tCounter'

SELECT   
    pt.[name] AS 'parentTable',  
    ct.[name] AS 'childTable',  
    fk.[name] AS 'fkName', 
*   
FROM sys.foreign_keys fk        
    INNER JOIN sys.tables pt              
        ON pt.object_ID = fk.parent_object_id        
    INNER JOIN sys.tables ct              
        ON ct.object_ID = fk.referenced_object_id   
WHERE pt.name = @tableName      
    OR ct.name = @tableName   
ORDER BY pt.name, ct.name
person StingyJack    schedule 14.01.2009
comment
Это именно то, о чем просили, а затем некоторые. - person StingyJack; 15.01.2009
comment
Я запустил его, и результат был нулевым. Должен был быть комментарий по этому поводу, прежде чем отмечать его. - person TamusJRoyce; 08.08.2011
comment
Если вы запустили его, вывода не было, значит, внешние ключи не определены. - person Davin Studer; 12.10.2012

Начало здесь

    SELECT cons.TABLE_NAME
    , cons.CONSTRAINT_NAME PK_NAME
    , cols.COLUMN_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS cons
LEFT join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE cols
ON cons.CONSTRAINT_NAME = cols.CONSTRAINT_NAME
WHERE cons.CONSTRAINT_TYPE = 'foreign KEY'
ORDER BY cons.TABLE_NAME
    , cons.CONSTRAINT_NAME
    , cols.COLUMN_NAME

[править] форматирование перепуталось

[править2] уже нет

person SQLMenace    schedule 14.01.2009
comment
близко... Кредит для запроса, который работает. Для данной таблицы «foo» мне нужен запрос для создания набора таблиц с внешними ключами, указывающими на foo. - person Macho Matt; 14.01.2009

person    schedule
comment
Если вам также нужны имена столбцов (спасибо, Алекс): ВЫБЕРИТЕ o2.name, col_name(rkeyid, rkey) as referenced_column_name FROM sysobjects o INNER JOIN sysforeignkeys fk на o.id = fk.rkeyid INNER JOIN sysobjects o2 на fk.fkeyid = o2 .id ГДЕ o.name = 'ATE_Question' - person Macho Matt; 14.01.2009