MSSQL:如何找到所有具有引用特定table.column的外键并具有这些外键值的表?

Pas*_*hon 22 sql-server sql-server-2008

我有一个表,其主键在其他几个表中作为外键引用.例如:

CREATE TABLE `X` (
  `X_id` int NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY  (`X_id`)
)
CREATE TABLE `Y` (
  `Y_id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `X_id` int DEFAULT NULL,
  PRIMARY KEY  (`Y_id`),
  CONSTRAINT `Y_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
)
CREATE TABLE `Z` (
  `Z_id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `X_id` int DEFAULT NULL,
  PRIMARY KEY  (`Z_id`),
  CONSTRAINT `Z_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
)
Run Code Online (Sandbox Code Playgroud)

现在,我不知道数据库中有多少表包含外键到X,如表Y和Z.是否有可用于返回的SQL查询:1.具有外键到X AND的表的列表2.这些表中的哪些实际上具有外键中的值

谢谢!

Joe*_*eph 53

试试这个查询:

您必须使用sysreferencessysobjects 表来获取信息

下面的查询给出了所有的foriegn键以及具有数据库中列名的父表

select cast(f.name as varchar(255)) as foreign_key_name
, cast(c.name as varchar(255)) as foreign_table
, cast(fc.name as varchar(255)) as foreign_column
, cast(p.name as varchar(255)) as parent_table
, cast(rc.name as varchar(255)) as parent_column
from  sysobjects f
inner join sysobjects c on f.parent_obj = c.id
inner join sysreferences r on f.id = r.constid
inner join sysobjects p on r.rkeyid = p.id
inner join syscolumns rc on r.rkeyid = rc.id and r.rkey1 = rc.colid
inner join syscolumns fc on r.fkeyid = fc.id and r.fkey1 = fc.colid
where f.type = 'F'
Run Code Online (Sandbox Code Playgroud)

  • +1对于一个非常有用的SQL查询. (4认同)