SQL Server获取两个表的外键

时间:2012-06-20 13:58:08

标签: sql sql-server

在SQL Server中,我们是否有build-it函数来获取两个表之间的外键?

例如,Table_A, Table_B

select myfunction ('Table_A', 'Table_B')
-- it should give the column name of its foreign keys, if no any relationship, it return null.

由于

3 个答案:

答案 0 :(得分:3)

SELECT TABLE_NAME
   , CONSTRAINT_NAME
   , COLUMN_NAME
   , ORDINAL_POSITION
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE CONSTRAINT_NAME IN (
   SELECT CONSTRAINT_NAME
   FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS)
ORDER BY TABLE_NAME, ORDINAL_POSITION;

看看here

答案 1 :(得分:3)

您可以使用以下内容:

SELECT 
    FKName = fk.name,
    ParentTable = tpar.name,
    ParentColumn = colpar.name,
    ReferencedTable = tref.name,
    ReferencedColumn = colref.name
FROM
    sys.foreign_keys fk
INNER JOIN 
    sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
INNER JOIN 
    sys.tables tpar ON fk.parent_object_id = tpar.object_id
INNER JOIN 
    sys.columns colpar ON fkc.parent_object_id = colpar.object_id AND fkc.parent_column_id = colpar.column_id
INNER JOIN 
    sys.tables tref ON fk.referenced_object_id = tref.object_id
INNER JOIN 
    sys.columns colref ON fkc.referenced_object_id = colref.object_id AND fkc.referenced_column_id = colref.column_id

但是,当然,您可以在TableATableB之间拥有多个外键,并且它们可以“双向” - 您可以从FK开始{ {1}}到ParentTable = TableA,另一个从ReferencedTable = TableBParentTable = TableB

因此,要在两个表之间找到所有外键,请使用以下内容:

ReferencedTable = TableA

是的,如果你想 - 你可以将它包装在一个函数中,如果你愿意的话 - 我不建议你这样做。

答案 2 :(得分:1)

有几种方法可以做到这一点。您可以使用以下内容:

  1. 在SQL Server Management Studio中创建一个图表来查看连接/外键(但不是函数)

  2. 您可以使用INFORMATION_SCHEMA运行查询。这允许您查看从系统数据库中提取的所有元数据。以下是有用教程的链接:INFORMATION_SCHEMA Tutorial

  3. 此外,在以下StackExchange文章中解决了类似的问题。这是一个链接:Link to Similar StackOverflow Post