SQL 2000:T-SQL获取表的外键关系

Bin*_*ier 4 sql-server-2000 foreign-key-relationship

SQL Server 2000类似但不具有相同性- 查询表的外键关系

我需要一个T-SQL语句,它将使用给定表名的SQL 2000,将返回该表的外键关系,例如

表MyFristTable具有MySecondTable的外键,其中MyFirstTable.ColA必须位于MySecondTable.ColB中.如果为MyFirstTable运行sql语句(或存储过程)并返回结果集,我会很高兴

Column | FK_Table      | FK_COLUMN
----------------------------------
ColA   | MySecondTable | ColB
Run Code Online (Sandbox Code Playgroud)

注意:我有SQL 2005的样本,因为它们依赖于sys.foreign_key_columns而无法工作

我宁愿不必解析sp_help语句的结果.

谢谢,

Chr*_*ris 13

我不得不为查询做这件事,我在尝试了一个类似于sys表的版本之后找到了这个存储过程:

exec sp_fkeys @fktable_name = 'foo'
Run Code Online (Sandbox Code Playgroud)

看起来这在SQL Server 2000中可用.此外,我发现在少数情况下,此存储过程与此处的查询之间存在细微差别.我猜sp_fkeys是规范版本.


Aak*_*shM 6

DECLARE @tableName sysname

SET @tableName = '' -- Your table name goes here

SELECT
    c.name
    , target.name
    , targetc.name
FROM
    -- source table
    sysobjects t
    -- source column
    INNER JOIN syscolumns c ON t.id = c.id
    -- general constraint
    INNER JOIN sysconstraints co ON t.id = co.id AND co.colid = c.colid
    -- foreign key constraint
    INNER JOIN sysforeignkeys fk ON co.constid = fk.constid
    -- target table
    INNER JOIN sysobjects target ON fk.rkeyid = target.id
    -- target column
    INNER JOIN syscolumns targetc ON fk.rkey = targetc.colid AND fk.rkeyid = targetc.id
WHERE
    t.name = @tableName
Run Code Online (Sandbox Code Playgroud)

注意我认为我只使用SQL 2000中可用的那些系统视图(即sysXXX而不是SQL 2005 sys.XXX)但我实际上只在SQL 2005环境中测试了它.