【问题标题】:SQL : Check if primary key is foreign keySQL:检查主键是否为外键
【发布时间】:2013-09-02 12:48:31
【问题描述】:

如果表的 name of 主键列也是信息模式中的外键,我想提取它 像两张桌子:

Student 
std_id  std_name

PHDstudent
std_id   reaserchfield

PHDstudent 中的std_id 既是主键,又是外键,指向Student 表。

【问题讨论】:

  • 如果 PK 是复合的,您是否需要同时检测 all 列是否是 FK 引用的一部分,以及单个列(或所有 PK 的子集列)是 FK 引用的一部分?
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • DBMS 是 sql server 2008。我希望 phdstudent 中的列名不在学生表中。

标签: sql sql-server sql-server-2008 database-schema


【解决方案1】:

运行此查询

SELECT Tab.TABLE_NAME, Col.Column_Name from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name
    AND Col.Table_Name = Tab.Table_Name
    AND Constraint_Type = 'PRIMARY KEY '
INTERSECT
SELECT Tab.TABLE_NAME, Col.Column_Name from 
    INFORMATION_SCHEMA.TABLE_CONSTRAINTS Tab, 
    INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE Col 
WHERE 
    Col.Constraint_Name = Tab.Constraint_Name
    AND Col.Table_Name = Tab.Table_Name
    AND Constraint_Type = 'FOREIGN KEY '

【讨论】:

  • 谢谢它的工作。但是如果想得到引用表怎么办?我添加了“选择 Tab.REFERENCED_TABLE_NAME”。但没有回答。
【解决方案2】:
SELECT s.std_id FROM Student s 
INNER JOIN PHDstudent p 
ON s.std_id = p.std_id 

阅读INNER JOINS

【讨论】:

  • 在查询中主键名称未知,我想从 information_shcema 获取列名
【解决方案3】:

我认为您是在询问主键列名,而不是您应该使用下面的查询来为您提供主键列名.....

SELECT column_name FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE OBJECTPROPERTY(OBJECT_ID(constraint_name), 'IsPrimaryKey') = 1 AND table_name = 'PHDstudent'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多