Sql server 如何从中查找表外键?

Sql server 如何从中查找表外键?,sql-server,Sql Server,我有一张带外键的桌子。如何判断FK是哪个表中的主键?大约有200个表,我不知道如何找到这些信息来自/连接到哪里 这应该会有帮助。只需在要查询的数据库中运行它: SELECT f.NAME AS ForeignKey ,SCHEMA_NAME(f.SCHEMA_ID) SchemaName ,OBJECT_NAME(f.parent_object_id) AS TableName ,COL_NAME(fc.parent_object_id, fc.parent_column

我有一张带外键的桌子。如何判断FK是哪个表中的主键?大约有200个表,我不知道如何找到这些信息来自/连接到哪里

这应该会有帮助。只需在要查询的数据库中运行它:

SELECT f.NAME AS ForeignKey
    ,SCHEMA_NAME(f.SCHEMA_ID) SchemaName
    ,OBJECT_NAME(f.parent_object_id) AS TableName
    ,COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName
    ,SCHEMA_NAME(o.SCHEMA_ID) ReferenceSchemaName
    ,OBJECT_NAME(f.referenced_object_id) AS ReferenceTableName
    ,COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id
GO
资料来源:


基本上,第一列是FK,后面是FK模式和对象。以下是PK列名、其模式和对象。

这应该会有所帮助。只需在要查询的数据库中运行它:

SELECT f.NAME AS ForeignKey
    ,SCHEMA_NAME(f.SCHEMA_ID) SchemaName
    ,OBJECT_NAME(f.parent_object_id) AS TableName
    ,COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName
    ,SCHEMA_NAME(o.SCHEMA_ID) ReferenceSchemaName
    ,OBJECT_NAME(f.referenced_object_id) AS ReferenceTableName
    ,COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id
GO
资料来源:

基本上,第一列是FK,后面是FK模式和对象。以下是PK列名、其架构和对象。

使用此项

SELECT fk.name,
       Object_name(fk.parent_object_id) [Parent table],
       c1.name                          [Parent column]
FROM   sys.foreign_keys fk
       INNER JOIN sys.foreign_key_columns fkc
               ON fkc.constraint_object_id = fk.object_id
       INNER JOIN sys.columns c1
               ON fkc.parent_column_id = c1.column_id
                  AND fkc.parent_object_id = c1.object_id
       INNER JOIN sys.columns c2
               ON fkc.referenced_column_id = c2.column_id
                  AND fkc.referenced_object_id = c2.object_id
WHERE  Object_name(fk.referenced_object_id) = 'Tablename' -- Replace with your tablename
       AND c2.name = 'Columname' -- Replace with your columname
或者干脆用

sp_help Tablename or [Alt]+F1
用这个

SELECT fk.name,
       Object_name(fk.parent_object_id) [Parent table],
       c1.name                          [Parent column]
FROM   sys.foreign_keys fk
       INNER JOIN sys.foreign_key_columns fkc
               ON fkc.constraint_object_id = fk.object_id
       INNER JOIN sys.columns c1
               ON fkc.parent_column_id = c1.column_id
                  AND fkc.parent_object_id = c1.object_id
       INNER JOIN sys.columns c2
               ON fkc.referenced_column_id = c2.column_id
                  AND fkc.referenced_object_id = c2.object_id
WHERE  Object_name(fk.referenced_object_id) = 'Tablename' -- Replace with your tablename
       AND c2.name = 'Columname' -- Replace with your columname
或者干脆用

sp_help Tablename or [Alt]+F1

NoDisplayName或Kris G.的答案都可以,但是如果您想在SSMS中更容易记住,只需右键单击外键并选择脚本As>Create to>New Window


然后,您将获得一个可用于(重新)创建FK的脚本,通过阅读该脚本,您将能够看到它在哪个表中引用了哪个列。

NoDisplayName或Kris G.的答案都应该可以,但是如果您想在SSMS中更容易记住,只需右键单击外键,然后选择脚本作为>创建到>新建窗口


然后,您将获得一个脚本,该脚本可用于(重新)创建FK,您将能够通过阅读该脚本查看它在哪个表中引用了哪个列。

看起来sp_help Tablename正在执行我需要的操作。非常感谢!看起来sp_help Tablename正在执行我需要的操作。非常感谢!