我正在尝试确定从数据库中删除表的风险。
数据库很大,包含数百个表。
我有一个返回与表关联的外键的查询。所以我可以给它提供我想删除的表名,它会告诉我哪些表依赖于它拥有的列。所以我还必须删除返回的表。
我的问题是,因为我需要删除这些表,所以我想查看依赖于初始结果的任何其他表。
因此,我相信我需要我的查询循环调用它上次运行的结果,直到没有更多独特的结果。
这可能吗?有没有更简单的方法来做到这一点?
编辑:这是查询:
SELECT
PK.TABLE_NAME AS PrimaryTable,
FK.TABLE_NAME AS ForeignTable,
PT.COLUMN_NAME AS PrimaryColumn,
CU.COLUMN_NAME AS ForeignColumn,
C.CONSTRAINT_NAME AS ConstraintName
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
SELECT i1.TABLE_NAME, i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT ON PT.TABLE_NAME = PK.TABLE_NAME
WHERE PK.TABLE_NAME IN
('Table1','Table2')
ORDER BY
1,2,3,4