2012-07-26 60 views
0

我正在重构我的应用程序,并且我不再需要其中一个数据库表。我尝试将其删除,但它给了我一个错误:我怎样才能找出哪个表连接到某个表?

Drop Failed for: 'XYZ'. Could not drop because it is referenced by a Foreign Key Constraint

我如何可以找出其他表有外键列到这个表?

回答

0

右键单击对象浏览和查看依赖关系中的表格?

+0

有人向下投我不做任何评论。请解释?我总是打开纠正。 – PowerUser 2013-07-31 20:33:31

0

你可以在这里获取列表(离开关闭where子句,如果你想在数据库中的所有FK约束列表):

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; 
0

试试这个

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

为什么'all_objects'?你为什么需要加入? – 2012-07-26 15:23:22

+0

Sybase的坏习惯我猜。 – 2012-07-26 15:35:21

相关问题