代码之家  ›  专栏  ›  技术社区  ›  Kevin

查询以获取SQL Server 2000中的所有外键约束

  •  3
  • Kevin  · 技术社区  · 15 年前

    我需要查询SQL Server 2000以获取所有外键的列表。

    尤其是指向特定列的所有外键。

    如何编写此查询?

    3 回复  |  直到 13 年前
        1
  •  14
  •   Community CDub    13 年前
    select * from sysobjects
    where xtype = 'F'
    

    我希望这样可以做到,并且与SQL Server 2000兼容!

    如果您还需要SQL Server 2000中的表和列信息,那么它会更加复杂;您需要加入 sysforeignkeys syscolumns 目录视图如下:

    select
      so.name 'foreign key name',
      OBJECT_NAME(parent_obj) 'table',
      OBJECT_NAME(sf.fkeyid) 'referencing table',
      sc1.name 'referencing column',
      OBJECT_NAME(sf.rkeyid) 'referenced table',
      sc2.name 'referenced column'
    from sysobjects so
    inner join sysforeignkeys sf on so.id = sf.constid
    inner join syscolumns sc1 on sf.fkeyid = sc1.id and sf.fkey = sc1.colid
    inner join syscolumns sc2 on sf.rkeyid = sc2.id and sf.fkey = sc2.colid
    where so.xtype in ('F','PK')
    

    如果要利用SQL Server 2000中确实可用的信息架构视图,请使用以下查询:

    SELECT
        rc.CONSTRAINT_NAME,     
        rcu.TABLE_NAME 'Referencing Table', 
        rcu.COLUMN_NAME 'Referencing Column',
        rcu1.TABLE_NAME 'Referenced Table',
        rcu1.COLUMN_NAME 'Referenced Column'
    FROM
        INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
    INNER JOIN 
        INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE rcu 
          ON rc.CONSTRAINT_CATALOG = rcu.CONSTRAINT_CATALOG 
             AND rc.CONSTRAINT_NAME = rcu.CONSTRAINT_NAME
    INNER JOIN 
        INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE rcu1 
          ON rc.UNIQUE_CONSTRAINT_CATALOG = rcu1.CONSTRAINT_CATALOG 
             AND rc.UNIQUE_CONSTRAINT_NAME = rcu1.CONSTRAINT_NAME
    

    马克

        2
  •  4
  •   marc_s    13 年前
    select * from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
    

    如果您需要关于该键的更多信息,那么您可以将它加入到信息_schema.key_column_usage视图中,该视图包含该键引用的列。

        3
  •  1
  •   KM.    15 年前

    查看sp_helpconstraint的来源以获得更多的想法,但这应该是有效的…

    获取引用目标表列的每个FK

    • 替换“yourtablename”
    • 取消对最后一个“和”的注释并设置目标列名

    代码:

    --list all tables & columns that refer to the given table
    select
        k.name,pt.Name AS ParentTable,pc.name,c.constraint_column_id,ct.Name AS ReferedToTable,c.referenced_column_id,cc.Name
        from sys.foreign_keys                  k
            INNER JOIN sys.foreign_key_columns c ON k.parent_object_id=c.parent_object_id
            INNER JOIN sys.objects             pt ON c.parent_object_id=pt.object_ID
            INNER JOIN sys.objects             ct ON c.referenced_object_id=ct.object_ID
            INNER JOIN  sys.columns            pc ON c.parent_object_id=pc.object_ID AND c.parent_column_id=pc.column_id
            INNER JOIN  sys.columns            cc ON c.referenced_object_id=cc.object_ID AND c.referenced_column_id=cc.column_id
        where k.referenced_object_id = object_id('YourTableName')
            --AND pc.name='YourColumnName' --parent table column name
            --AND cc.name='YourColumnName' --referenced table's column name