【问题标题】:SQL Server List Foreign Key InformationSQL Server 列出外键信息
【发布时间】:2018-01-15 12:54:32
【问题描述】:

我需要获取所有外键的列表、它们所属的架构/表、它们引用的架构/表以及所引用的列的名称。这是我到目前为止所拥有的,但返回的列不正确。有什么想法吗?

select distinct
    ParentSchema.name as PARENT_SCHEMA_NAME,
    ParentTable.name as PARENT_TABLE_NAME,
    TheSchema.name as TABLE_SCHEMA,
    TheTable.name as TABLE_NAME,    
    fks.name as KEY_NAME ,
    COL_NAME(ParentTable.OBJECT_ID,fkcs.constraint_column_id) as CHILD_COLUMN_NAME
from 
    sys.foreign_keys fks
inner join
    Sys.foreign_key_columns fkcs
on
    fks.parent_object_id = fkcs.parent_object_id
inner join
    sys.tables TheTable
on
    fks.parent_object_id = TheTable.object_id
inner join
    sys.tables ParentTable
on
    fks.referenced_object_id = ParentTable.object_id
inner join
    sys.schemas TheSchema
on
    TheTable.schema_id = TheSchema.schema_id
inner join
    sys.schemas ParentSchema
on
    ParentTable.schema_id = ParentSchema.schema_id
order by
    fks.name

【问题讨论】:

    标签: sql-server join schema metadata


    【解决方案1】:

    我使用以下脚本来获取我需要的与外键相关的信息,这对您也可能有用:

    SELECT    KCU1.CONSTRAINT_NAME AS FK_CONSTRAINT_NAME 
            , KCU1.TABLE_NAME AS FK_TABLE_NAME 
            , KCU1.COLUMN_NAME AS FK_COLUMN_NAME 
            , KCU2.CONSTRAINT_NAME AS REFERENCED_CONSTRAINT_NAME 
            , KCU2.TABLE_NAME AS REFERENCED_TABLE_NAME 
            , KCU2.COLUMN_NAME AS REFERENCED_COLUMN_NAME 
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC 
            INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU1 ON KCU1.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG AND KCU1.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA AND KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME 
            INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU2 ON KCU2.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG AND KCU2.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA AND KCU2.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION
    WHERE KCU1.TABLE_NAME = 'PurchaseOrders'
    

    对于表PurchaseOrders,在WideWorldImporters 数据库中它显示以下信息:

    您可以查看information_schema.referential_constraints 中包含的所有列和 information_schema.key_column_usage,然后根据您的需要更改查询。

    【讨论】:

      猜你喜欢
      • 2013-12-23
      • 1970-01-01
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多