2
鉴于这两个表:递归SQL来查找关键路径?
[dbo].[Task]
[Id] [Duration] [ScheduledStart]
int int Nullable DateTime
[dbo].[TaskDependencies]
[Id] [PredecessorTaskId] [TaskId]
int FK_Task_Id FK_Task_Id
我试图找到任务紧前的最新结束日期。对于任务表,ScheduledStart可以为空。这背后的想法是,如果没有一个明确的计划的开始,也可能是从它的前辈(根级的任务必须有一个ScheduledStart,因此计算可以开始的地方)的。任务也可以有多个前任。
,我想出了一个假的递归功能(我认为)做什么我要找的。如果有,因为我已经习惯了更多的程序编程SQL写这更有效的方式是什么我不知道是。我应该让Function_A成为一个存储过程并让它自己调用吗?有没有这个可以用WITH语句来完成的方式(和是那些递归查询的更有效的方式,或者像这样的递归函数)?
DateTime Function_A(Task)
{
var predecessorList = getPredecessors(Task)
var latestEndDate;
var currentPredecessorLatestEndDate;
ForEach(Predecessor in predecessorList)
{
if(Predecessor.ScheduledStart != null)
{
if(latestEndDate != null)
{
if(Predecessor.StartDate + Predecessor.Duration > latestEndDate)
{
latestEndDate = Predecessor.StartDate + Predecessor.Duration;
}
}
else
{
latestEndDate = Predecessor.StartDate + Predecessor.Duration;
}
}
else
{
currentPredecessorLatestEndDate = Function_A(Predecessor.Id);
if(latestEndDate != null)
{
if(currentPredecessorEndDate > latestEndDate)
{
latestEndDate = currentPredecessorEndDate;
}
}
else
{
latestEndDate = currentPredecessorEndDate;
}
}
}
return latestEndDate;
}
感谢您的帮助!
感谢,肯定把我在正确的方向。 – Ocelot20 2010-10-08 15:21:17