3

巨大な MS Sql Server 2005 データベースのコピーがあり、1,300 を超えるテーブルに加えて、数百のストアド プロシージャと数十のビュー (ジョブを除く) があります。複数のアプリケーションで使用されます。

1 つのアプリケーションが適切に動作するために必要なテーブルを 200 個未満、ストアド プロシージャおよびその他の関連オブジェクトを 100 個未満にするだけで、この怪物をスリム化する必要があります。もちろん、このアプリケーションで使用されるテーブルとストアド プロシージャの正確なリストはありますが、コードから直接呼び出されないオブジェクト (ジョブ、ビュー、トリガーなど) をリストする方法はありません。

質問があります。そのタスクを達成するための最善の方法をアドバイスしてください。1000 個のテーブルを安全にドロップし、最初の関連オブジェクト (外部キー、関連するビューとストアド プロシージャ、ジョブ、トリガーなど) をリストする方法、およびそれらのオブジェクトがアプリケーションで必要な他のオブジェクト (テーブルまたはストアド プロシージャ) を指していない場合、それらを削除してから、テーブルを削除してください。同じことがストアド プロシージャにも当てはまります。

4

3 に答える 3

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

これにより、テーブルの外部キーが一覧表示されます。WHEREname =を置き換えて、OBJECT_ID IN(....すべてのオブジェクトID)を使用できます。

このスクリプトは、( SQL Serverの特定のテーブルを参照するすべての外部キーを一覧表示するにはどうすればよいですか?)の回答の1つに基づいています。

編集

@Jacekのコメントから、stored procedure sp_depends

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

于 2013-03-04T14:11:03.147 に答える
0

これが私の最初の考えです。Information_Schemaビューを使用してテーブルに関するメタデータを見つけ、それに基づいてアクションを実行します。

于 2013-03-04T14:11:04.403 に答える
0

たいしたことではありませんが、スクリプト ツールを使用してスクリプトを作成すると、データベース内のすべてのオブジェクトを削除して作成できます。知っている依存関係の順序に基づいてそれを行います。

于 2013-03-04T14:31:23.290 に答える