我怎样才能找出哪个表连接到某个表?
问题描述:
我正在重构我的应用程序,并且我不再需要其中一个数据库表。我尝试将其删除,但它给了我一个错误:我怎样才能找出哪个表连接到某个表?
Drop Failed for: 'XYZ'. Could not drop because it is referenced by a Foreign Key Constraint
我如何可以找出其他表有外键列到这个表?
答
右键单击对象浏览和查看依赖关系中的表格?
答
你可以在这里获取列表(离开关闭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;
答
试试这个
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
有人向下投我不做任何评论。请解释?我总是打开纠正。 – PowerUser 2013-07-31 20:33:31