2010-07-23 5 views
3

permet de dire que je table1 = 'foo' et 4 autres tables fee1, Fee2, Frais 3, FEE4Obtenir la liste des tableaux à charge, SQL Server 2005

disent maintenant la clé primaire de foo est une clé étrangère de fee1 et fee2. Étant donné le nom 'foo', comment puis-je savoir que fee1 et fee2 ont des dépendances de clé sur foo.

S'il vous plaît aider, une requête de psuedo serait utile.

Cependant, je sais comment calculer le nom de foo pour obtenir les dépendances de clé de foo seul. en utilisant INFORMATION_SCHEMA.USAGE_KEY_COLUMN.

Répondre

0

une façon, il suffit d'ajouter et TC.TABLE_NAME = 'foo' à la clause WHERE

SELECT TC.CONSTRAINT_SCHEMA + '.'+ TC.TABLE_NAME AS PRIMARYKEYTABLE 
,TC.CONSTRAINT_NAME AS PRIMARYKEY 
,COALESCE(RC1.CONSTRAINT_NAME,'N/A') AS FOREIGNKEY 
,CASE WHEN TC2.TABLE_NAME IS NULL THEN 'N/A' 
ELSE TC.CONSTRAINT_SCHEMA + '.' + TC2.TABLE_NAME END AS FOREIGNKEYTABLE 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC 
LEFT JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC1 
     ON TC.CONSTRAINT_NAME =RC1.UNIQUE_CONSTRAINT_NAME 
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC2 
     ON TC2.CONSTRAINT_NAME =RC1.CONSTRAINT_NAME 
WHERE TC.CONSTRAINT_TYPE ='PRIMARY KEY' 
ORDER BY TC.TABLE_NAME,TC.CONSTRAINT_NAME,RC1.CONSTRAINT_NAME 

De Find all Primary and Foreign Keys In A Database

7

Essayez ceci dans SQL Server Mgmt Studio:

SELECT 
    fk.name, 
    OBJECT_NAME(fk.parent_object_id) 'Child table' 
FROM 
    sys.foreign_keys fk 
WHERE 
    fk.referenced_object_id = OBJECT_ID('YourTableNameHEre') 

Cette listera toutes les contraintes de clé étrangère et de quelle table elles proviennent qui référencent votre table YourTableNameHere.

1

Essayez cette

SELECT 
    'CONSTRAINT :' + C.Constraint_Name + ' 
    Goes FROM ' + PK.TABLE_NAME + '.' + PT.COLUMN_NAME + ' 
    To ' + FK.TABLE_NAME + '.' + CU.COLUMN_NAME + ' 
    ----------------------------------------------------- 
    ' 

FROM 
    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C 
    INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK 
     ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME 
    INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK 
     ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME 
    INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU 
     ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME 
    INNER JOIN 
    ( 
     SELECT 
      i1.TABLE_NAME, i2.COLUMN_NAME 
     FROM 
      INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1 
      INNER JOIN 
      INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 
      ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME 
      WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' 
    ) PT 
    ON PT.TABLE_NAME = PK.TABLE_NAME 

Pour obtenir votre table spécifique, ajoutez

`WHERE PK.TABLE_Name = "YourTableName"` 
0

J'utilise sp_help pour fournir une vue au niveau de la synthèse des différents objets de base de données. Lorsque vous spécifiez une table de base de données, elle renvoie des informations sur les clés primaires, les contraintes, les index, les clés étrangères et leurs références, ainsi que les autres tables ayant des clés étrangères à celle spécifiée. Il est rapide et facile de se souvenir de la façon d'obtenir cette information en une fois.