我需要一个查询SQL Server 2000的语句,以获取所有外键的列表。
特别是指向特定列的所有外键。
我该如何编写这个查询语句?
我需要一个查询SQL Server 2000的语句,以获取所有外键的列表。
特别是指向特定列的所有外键。
我该如何编写这个查询语句?
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中确实可用的INFORMATION_SCHEMA视图,请使用以下查询:
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
马克
select * from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
查看 sp_helpconstraint 的源代码以获取更多想法,但这应该可以工作...
获取指向目标表和列的每个 FK
代码:
--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
sf.fkeyid = sc1.id and sf.fkey = sc1.colid
(rkey也是同样) - Markso.xtype in ('F', 'PK')
。 - Markand sf.rkey = sc2.colid
联接参考列,而不是and sf.fkey = sc2.colid
。 - Pedro Custódio