我有一个包含几个约束的表,没有on cascade delete属性。
因此,如果我尝试通过id删除和对象,我会收到以下错误:
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
问题在于,如果我运行删除,我会在一时间获得有关一个约束的错误,是否有办法获得所有带有命令约束的表?
通过这种方式,我可以生成一个查询,删除父节点之前约束的对象。
答案 0 :(得分:1)
如果我理解了这个问题,你想知道如何找到引用你的表的外键 - 嗯,这应该让你开始:
DECLARE @YourTableName sysname = '<Your table name goes here>'
SELECT OBJECT_NAME(f.parent_object_id) As ParentTable,
OBJECT_NAME(f.referenced_object_id) As ReferencedTable,
c1.name As ParentColumnName,
c2.name As ReferencedColumnName
FROM sys.foreign_key_columns f
INNER JOIN sys.all_columns c1
ON f.parent_object_id = c1.object_id and f.parent_column_id = c1.column_id
INNER JOIN sys.all_columns c2
ON f.referenced_object_id = c2.object_id and f.referenced_column_id = c2.column_id
WHERE OBJECT_NAME(f.referenced_object_id) = @YourTableName