declare @temp int,
@temp1 int,
@temp2 int,
@temp3 int,
@temp4 int,
@temp5 int,
@modid int,
@supid int,
@sid varchar(50)
begin tran
select * from StudentSupervisor;
select @temp = count(*) from Students s where s.IsLockedOut = '0' and s.IsGraduated = '0';
select @temp1 = count(*) from staffs st where st.IsLockedOut ='0';
set @temp5 = round(@temp/@temp1,0);
WHILE (select count(*) from students s where s.IsLockedOut ='0' and s.StudentId not in (select ss.StudentId from StudentSupervisor ss where s.StudentId = ss.StudentId and ss.IsApproved = 1)) != 0
BEGIN
select top 1 @sid = s.studentid from students s, StudentSupervisor ss where s.IsLockedOut ='0' and s.StudentId not in (select s.StudentId where s.StudentId = ss.StudentId and ss.IsApproved = 1);
select top 1 @supid = st.Staffid, @modid = st.moderatorid from Staffs st where st.IsLockedOut =0 and Quota <=@temp5;
insert into StudentSupervisor
(StudentId,SupervisorId,ModeratorId,IsApproved)
values
(@sid,@supid,@modid,1)
update Staffs set quota +=1 where staffs.StaffID = @supid;
END
select * from StudentSupervisor;
ROLLBACK tran
こんにちは、私はこのロジックに固執していて、解決策を探しましたが、夜通しの仕事をしても何も得られません。今の状況を明確にしましょう。まず、studentsupervisorテーブルまたはstudentsupervisorテーブルにない学生を数えたいと思います。しかし、承認されました!= 1、割り当てが学生の総数/スタッフの総数を超えないスタッフの数を取得します。その後、学生がまだ利用可能である間に、学生をスタッフと一緒に学生監督テーブルに送り込みたいと思います。私の動的クエリが間違っています、ありがとう