我在关系数据库中有一堆表,显然,由于外键关系,它们彼此依赖。我想构建一个依赖树,遍历它,并输出INSERT SQL语句。我首先需要在依赖关系树中为外键表输出SQL,因为父表将依赖于外键标识符表中的值。
后续遍历的二叉树是否适合此任务?
答案 0 :(得分: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)
...
答案 1 :(得分:1)
如果表可以依赖于两个以上的表,则二叉树将不足。 让表A依赖于表B,C和D.然后你必须首先插入B,C和D,即A应该在你的树中有三个子节点。
我认为您需要使用更通用的树结构,它允许任意数量的子节点。如您所建议的那样,按顺序遍历此树结构应产生所需的结果。
当您的依赖图包含循环并且您需要推迟约束检查时,事情将开始变得混乱;)