2010-07-23 37 views
3

可以说我有表1 =“富”等4个表费用1,费用2,费用3,费用4获取相关的表的列表中,SQL Server 2005的

现在说foo的主键是费用1的外键和费用2。

鉴于'foo'这个名字,我将如何知道fee1和fee2已经为foo定义了关键依赖关系。

请帮忙,伪查询会有帮助。

但是,我知道如何弄清楚foo这个名字如何单独获取foo的foriegn关键依赖关系。使用INFORMATION_SCHEMA.USAGE_KEY_COLUMN。

回答

0

的一种方式,只需添加和TC.TABLE_NAME = '富' 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 

Find all Primary and Foreign Keys In A Database

7

试试这个在SQL Server管理工作室:

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

这将列出所有的外键约束以及它们来自哪个表,都是引用您的YourTableNameHere表。

1

试试这个

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 

为了让您的特定表,添加

`WHERE PK.TABLE_Name = "YourTableName"` 
0

我用sp_help用于提供不同的数据库对象的一决高低视图。指定数据库表时,它将返回有关主键,约束,索引,外键以及它们引用的内容的信息,以及哪些其他表具有指定的外键。记住一次获取这些信息的方法是快速和容易的。