gpt4 book ai didi

SQL Server 2005 : How to drop selected tables, 与所有相关对象

转载 作者:行者123 更新时间:2023-12-04 22:23:40 28 4
gpt4 key购买 nike

有一个巨大的 MS Sql Server 2005 数据库的副本,其中包含 1300 多个表,外加数百个存储过程和数十个 View ,这还不算作业。它被多个应用程序使用。

我需要瘦身这个怪物,只留下不到 200 个表和 100 个存储过程和其他相关对象,一个应用程序需要正常工作。当然,有这个应用程序使用的表和存储过程的确切列表,但是没有办法列出不是直接从代码调用的对象(如作业、 View 、触发器等)。

所以有一个问题:请建议完成该任务的最佳方法。如何安全地删除 1000 个表,首先列出相关对象(如外键、相关 View 和存储过程、作业、触发器等),如果这些对象不指向应用程序所需的其他对象(表或存储过程),删除它们,然后删除表。存储过程也是如此。

最佳答案

您想使用系统 表,其中包含有关约束、 View 等的所有信息。http://msdn.microsoft.com/en-us/library/aa260604(v=sql.80).aspx

我会专门查看 sysforeignkeyssysconstraints 等并加入正确的 object_id,为此您可以执行如下操作:

select t.name as TableWithForeignKey, fk.constraint_column_id as FK_PartNo , c.name as ForeignKeyColumn 
from sys.foreign_key_columns as fk
inner join sys.tables as t on fk.parent_object_id = t.object_id
inner join sys.columns as c on fk.parent_object_id = c.object_id and fk.parent_column_id = c.column_id
where fk.referenced_object_id = (select object_id from sys.tables where name = 'TableOthersForeignKeyInto')
order by TableWithForeignKey, FK_PartNo

这将列出您表中的外键,您可以将 WHERE name = 替换为使用 OBJECT_ID IN(....所有对象 ID)

此脚本基于 ( How can I list all foreign keys referencing a given table in SQL Server? ) 的其中一个答案

编辑

根据@Jacek 的评论,您还可以使用存储过程 sp_depends

http://msdn.microsoft.com/en-us/library/ms189487.aspx

关于SQL Server 2005 : How to drop selected tables, 与所有相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15203410/

28 4 0