DependencyWalker
SMO クラスを調べます- http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.dependencywalker_members(v=sql.90).aspx
基本的に、これらのいずれかを作成DiscoverDependencies()
し、Urns/SqlSmoObjects のリストを呼び出して、DependencyTree
バックを取得します。次に、この DependencyTree オブジェクトを DependencyWalker オブジェクトのWalkDependencies()
メソッドに渡し、依存関係の線形リストを取得して、必要なことを行うことができます。
以下は、参照されているすべてのものを含む任意のテーブルのセットを削除する方法がどのように見えるかのスケッチです。
using (var conn = TestConnection.OpenSqlConnectionForTest())
{
var db = SmoHelpersTest.GetDatabaseSmoObject(conn);
var smoTables = (from Table t in db.Tables
where t.Name.EndsWith("-XXX")
select t).ToList();
var dependencyWalker = new DependencyWalker(db.Parent);
var dependencyTree = dependencyWalker.DiscoverDependencies(smoTables.Cast<SqlSmoObject>().ToArray(), DependencyType.Parents);
var dependencyCollection = dependencyWalker.WalkDependencies(dependencyTree);
foreach (DependencyCollectionNode dependencyCollectionNode in dependencyCollection.Reverse())
{
Console.WriteLine(dependencyCollectionNode.Urn);
var smoObject = db.Parent.GetSmoObject(dependencyCollectionNode.Urn);
((dynamic)smoObject).Drop();
}
}