SQL Server 2005:如何删除所有相关对象的选定表

时间:2013-03-04 14:07:13

标签: sql sql-server sql-server-2005

有一个巨大的MS Sql Server 2005数据库的副本,有超过1300个表,加上数百个存储过程和数十个视图,不计算作业。它被多个应用程序使用。

我需要减少这个怪物,只留下少于200个表和100个存储过程以及其他相关对象,这是一个应用程序正常工作所必需的。当然,此应用程序使用的表和存储过程的确切列表,但没有办法列出未直接从代码中调用的对象(如作业,视图,触发器等)。

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

3 个答案:

答案 0 :(得分:2)

您想要使用system表,其中包含有关约束,视图等的所有信息。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的评论中,您也可以使用stored procedure sp_depends

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

答案 1 :(得分:0)

这是我的第一个想法:使用Information_Schema视图查找有关表的元数据并根据该数据采取操作。

答案 2 :(得分:0)

这不是brill,但如果您使用脚本工具并编写一个drop并创建数据库中的所有obejcts。它确实基于它所知道的依赖顺序来完成它。