我想实现递归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