select * from sysobjects
where xtype = 'F'
Cela devrait faire l'affaire et être compatible avec SQL Server 2000, j'espère!
Si vous avez en outre besoin des informations de table et de colonne dans SQL Server 2000, cela devient un peu plus complexe; vous devez joindre les sysforeignkeys
et syscolumns
vues de catalogue comme ceci:
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')
Et si vous voulez tirer parti des vues INFORMATION_SCHEMA qui sont effectivement disponibles dans SQL Server 2000, utilisez cette requête:
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
Comment obtenez-vous les colonnes? –
La deuxième requête semble un peu étrange. Il semble qu'il manque une condition de jointure - j'ai un produit cartésien. – Rashack
Vous avez réellement besoin de rejoindre sur 'sf.fkeyid = sc1.id et sf.fkey = sc1.colid' (et la même chose pour rkey) – Mark