Query to get all foreign key constraints in SQL Server 2000

前端 未结 3 818
生来不讨喜
生来不讨喜 2020-12-15 01:44

I need a query for SQL Server 2000 to get a list of all foreign keys.

Particularly all the foreign keys that point to a particular column.

How do I write thi

3条回答
  •  再見小時候
    2020-12-15 02:05

    select * from sysobjects
    where xtype = 'F'
    

    That should do the trick and be compatible with SQL Server 2000, I hope!

    If you additionally need the table and column information in SQL Server 2000, it gets a bit more involved; you need to join the sysforeignkeys and syscolumns catalog views like so:

    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')
    

    And if you want to leverage the INFORMATION_SCHEMA views which ARE indeed available in SQL Server 2000, use this query:

    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
    

    Marc

提交回复
热议问题