0

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

删除失败:“XYZ”。无法删除,因为它被外键约束引用

我怎样才能找出哪个表有这个表的外键列?

4

3 回答 3

0

右键单击对象探索中的表并查看依赖关系?

于 2012-07-26T15:06:56.603 回答
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';

要生成一个drop,你可以说:

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;
于 2012-07-26T15:12:28.333 回答
0

试试这个

    select * from sys.foreign_keys fk  where referenced_object_id = object_id(<tablename>)
于 2012-07-26T15:13:53.073 回答