我正在重构我的应用程序,我不再需要我的数据库表之一。我尝试删除它,但它给了我一个错误:
删除失败:“XYZ”。无法删除,因为它被外键约束引用
我怎样才能找出哪个表有这个表的外键列?
我正在重构我的应用程序,我不再需要我的数据库表之一。我尝试删除它,但它给了我一个错误:
删除失败:“XYZ”。无法删除,因为它被外键约束引用
我怎样才能找出哪个表有这个表的外键列?
右键单击对象探索中的表并查看依赖关系?
您可以在此处获取列表(如果您想要数据库中所有 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;
试试这个
select * from sys.foreign_keys fk where referenced_object_id = object_id(<tablename>)