在 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.
谢谢
在 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.
谢谢
你可以使用这样的东西:
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
但是当然,你可以在and之间有多个外键,它们可以“双向”——你可以在 FK 上从to和另一个从to 。TableA
TableB
ParentTable = TableA
ReferencedTable = TableB
ParentTable = TableB
ReferencedTable = TableA
因此,要查找两个表之间的所有外键,请使用以下内容:
WHERE
(ParentTable = 'TableA' AND ReferencedTable = 'TableB') OR
(ParentTable = 'TableB' AND ReferencedTable = 'TableA')
是的,如果你愿意——你可以把它包装在一个函数中,如果你愿意的话——但是我不建议这样做。
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;
看看这里。
有几种方法可以做到这一点。您可以使用以下内容:
在 SQL Server Management Studio 中创建图表以查看连接/外键(但不是函数)
您可以使用INFORMATION_SCHEMA
. 这允许您查看从系统数据库中提取的所有元数据。这是一个有用教程的链接:INFORMATION_SCHEMA 教程
此外,下面的 StackExchange 文章也解决了类似的问题。这是一个链接: 链接到类似的 StackOverflow 帖子