0

我在关系数据库中有一堆表,显然,由于外键关系,它们相互依赖。我想建立一个依赖树,遍历它,并输出 INSERT SQL 语句。我需要首先在我的依赖树中为外键表输出 SQL,因为父表将依赖于它们的外键标识符表中的值。

按后序遍历的二叉树是否适合这项任务?

4

2 回答 2

3

看看以下内容:

Microsoft.SqlServer.Management.Smo.Server
Microsoft.SqlServer.Management.Smo.Database
Microsoft.SqlServer.Management.Smo.Scripter

Microsoft.SqlServer.Management.Smo.DependencyTree
Microsoft.SqlServer.Management.Smo.DependencyWalker
Microsoft.SqlServer.Management.Smo.DependencyCollection
Microsoft.SqlServer.Management.Smo.DependencyCollectionNode

MSDN上有关于如何使用所有这些的示例。

本质上你想要类似的东西

Server server = new Server(SOURCESERVER);
Database database = server.Databases[SOURCEDATABASE];
Scripter sp = new Scripter(server);

...

UrnCollection col = new UrnCollection();

foreach (Table table in database.Tables)
{
    col.Add(table.Urn);
}

....

DependencyTree tree = sp.DiscoverDependencies(col, DependencyType.Parents);
DependencyWalker walker = new DependencyWalker(server);
DependencyCollection depends = walker.WalkDependencies(tree);

//Iterate over each table in DB in dependent order...
foreach (DependencyCollectionNode dcn in depends)

...
于 2009-06-11T09:45:25.483 回答
1

如果一个表可以依赖于两个以上的表,那么二叉树将是不够的。让表 A 依赖于表 B、C 和 D。然后您必须先插入 B、C 和 D,即 A 在树中应该有三个子节点。

我认为您需要使用更通用的树结构,它允许任意数量的子节点。如您所建议的,以后序遍历此树结构应该会产生所需的结果。

当您的依赖图包含循环并且您需要推迟约束检查时,事情将开始变得混乱;)

于 2009-06-09T23:15:23.813 回答