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是规范版本.
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环境中测试了它.