如何找出与某个表连接的表?

时间:2012-07-26 15:00:40

标签: sql-server

我正在重构我的应用程序,我不再需要其中一个数据库表。我尝试删除它,但它给了我一个错误:

  

掉线失败:'XYZ'。无法删除,因为它是由外键约束

引用的

如何找出其他表中有哪个外键列到此表?

3 个答案:

答案 0 :(得分:0)

右键单击Object Explore和View Dependencies中的表?

答案 1 :(得分:0)

您可以在此处获取列表(如果您想要数据库中所有FK约束的列表,请不要使用where子句):

SELECT name, 
  QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) 
  + '.' + QUOTENAME(OBJECT_NAME(parent_object_id))
  + ' references ' 
  + QUOTENAME(OBJECT_SCHEMA_NAME(referenced_object_id)) 
  + '.' + QUOTENAME(OBJECT_NAME(referenced_object_id))
FROM sys.foreign_keys
WHERE OBJECT_NAME(referenced_object_id) = N'XYZ';

要生成放置,您只需说:

DECLARE @sql NVARCHAR(MAX);
SET @sql = N'';

SELECT @sql = @sql + '
  ALTER TABLE ' + 
  QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) 
  + '.' + QUOTENAME(OBJECT_NAME(parent_object_id))
  + ' DROP CONSTRAINT ' + QUOTENAME(name) + ';'
FROM sys.foreign_keys
WHERE OBJECT_NAME(referenced_object_id) = N'XYZ';

EXEC sp_executesql @sql;

答案 2 :(得分:0)

试试这个

    select * from sys.foreign_keys fk  where referenced_object_id = object_id(<tablename>)