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