我正在重构我的应用程序,我不再需要其中一个数据库表。我尝试删除它,但它给了我一个错误:
掉线失败:'XYZ'。无法删除,因为它是由外键约束
引用的
如何找出其他表中有哪个外键列到此表?
答案 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>)