我想實現遞歸CTE而不是跟隨遊標,因爲在遊標內部執行存儲過程時需要很多時間來插入數據,特別是當表中有大量記錄時。我已經嘗試過使用CTE表達式來解決這個問題,但是我沒能用CTE生成相同的結果,而光標真的很糟糕,而且我完全想用CTE替換它,所以有什麼辦法可以將它縮短。提前謝謝。在遞歸CTE而不是光標內以編程方式執行存儲過程
Declare @Emp_Id As Numeric
Declare CurEmpWeekOff cursor for
Select Emp_Id From tblEmployee Where Cmp_Id = @Cmp_Id And Branch_Id = @Branch_Id And Emp_WeekOff_Type = 1
open CurEmpWeekOff
Fetch next From CurEmpWeekOff Into @Emp_Id
while @@Fetch_Status = 0
Begin
If @Is_Sunday = 1
Exec [prcEmployee_WeekoffInsert] @Cmp_Id, @Branch_Id, @Emp_Id, @From_Date, 0, '', @Login_Id, 0
If @Is_Monday = 1
Exec [prcEmployee_WeekoffInsert] @Cmp_Id, @Branch_Id, @Emp_Id, @From_Date, 1, '', @Login_Id, 0
If @Is_Tuesday = 1
Exec [prcEmployee_WeekoffInsert] @Cmp_Id, @Branch_Id, @Emp_Id, @From_Date, 2, '', @Login_Id, 0
If @Is_Wednesday = 1
Exec [prcEmployee_WeekoffInsert] @Cmp_Id, @Branch_Id, @Emp_Id, @From_Date, 3, '', @Login_Id, 0
If @Is_Thursday = 1
Exec [prcEmployee_WeekoffInsert] @Cmp_Id, @Branch_Id, @Emp_Id, @From_Date, 4, '', @Login_Id, 0
If @Is_Friday = 1
Exec [prcEmployee_WeekoffInsert] @Cmp_Id, @Branch_Id, @Emp_Id, @From_Date, 5, '', @Login_Id, 0
If @Is_Saturday = 1
Exec [prcEmployee_WeekoffInsert] @Cmp_Id, @Branch_Id, @Emp_Id, @From_Date, 6, '', @Login_Id, 0
Fetch next From CurEmpWeekOff Into @Emp_Id
End
Close CurEmpWeekOff
Deallocate CurEmpWeekOff
End
爲什麼這需要遞歸?你能解釋一下這段代碼的意圖嗎? – SWeko
我不明白爲什麼你需要循環。你能詳細說明元數據和你想要的嗎?這個問題太侷限了。 – Kangkan
當管理員試圖爲當時所有員工重置weekoff daywise設置時,此代碼會執行,我需要更新主要weekoff表以及使用當前更改更新employee_weekoff表。 – mayurk