在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.
由于
答案 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
但是,当然,您可以在TableA
和TableB
之间拥有多个外键,并且它们可以“双向” - 您可以从FK开始{ {1}}到ParentTable = TableA
,另一个从ReferencedTable = TableB
到ParentTable = TableB
。
因此,要在两个表之间找到所有外键,请使用以下内容:
ReferencedTable = TableA
是的,如果你想 - 你可以将它包装在一个函数中,如果你愿意的话 - 我不建议你这样做。
答案 2 :(得分:1)
有几种方法可以做到这一点。您可以使用以下内容:
在SQL Server Management Studio中创建一个图表来查看连接/外键(但不是函数)
您可以使用INFORMATION_SCHEMA
运行查询。这允许您查看从系统数据库中提取的所有元数据。以下是有用教程的链接:INFORMATION_SCHEMA Tutorial
此外,在以下StackExchange文章中解决了类似的问题。这是一个链接:Link to Similar StackOverflow Post