特にテーブルに多数のレコードがある場合、カーソル内でストアドプロシージャをプログラム的に実行してデータを挿入するのに時間がかかるため、カーソルをたどる代わりに再帰的な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