[阅读: 443] 2006-05-05 14:50:10
TMD,一执行就是十几秒
CREATE PROCEDURE StudentRwAsys(@ExamPlan varchar(40), @OrFlag int) AS
declare @Bkrw varchar(20), @Zdrw varchar(20)
declare @YearID varchar(20),@ClassID varchar(20),@SubjectID varchar(20)
declare @Zdrwfs float, @Bkrwfs float
declare @Zdrs float, @Bkrs float
declare @ExecSql nvarchar(500)
Select @Zdrw =prec from SHINSet where ID_ = '11'
Select @Bkrw =prec from SHINSet where ID_ = '22'
delete from SHTempTable
insert into SHTempTable(YearID,ClassID,SubjectID, AllRs)
Select YearID, ClassID,SubjectID, Count(*) from SHExamGrapeScore
Group By YearID,ClassID,SubjectID order by SubjectID, cast(ClassID as Int)
Declare RWCursor CURSOR FOR
Select YearID, ClassID, SubjectID from SHtempTable
Open RWCursor
fetch next from RWCursor into @YearID,@ClassID,@SubjectID
while @@FETCH_STATUS = 0
begin
Set @ExecSql = N'Select @zdrwfs= Min(SubjectScore) from (Select top '+@Zdrw+' percent * from SHExamGrapeScore ' +
' where SubjectID = '''+@SubjectID+'''' +' and YearID = '''+@YearID+''' and ExamPlan = '''+@ExamPlan+''' order by SubjectScore Desc) a '
Exec SP_EXECUTESQL @ExecSql, N'@zdrwfs float output' , @zdrwfs = @Zdrwfs output
Select @Zdrs = Count(*) from SHExamGrapeScore where YearID = @YearID and
ClassID = @ClassID and SubjectScore >= @Zdrwfs and SubjectID = @SubjectID
Set @ExecSql = ' Select @Bkrwfs = min( SubjectScore) from (Select top '+@Bkrw+' percent * from SHExamGrapeScore '+
' where ClassID = '''+@ClassID+''' ' +
' and YearID = '''+@YearID+''' '+
' and ExamPlan = '''+@ExamPlan+''''+
' order by SubjectScore Desc) a '
Exec SP_EXECUTESQL @ExecSql, N'@Bkrwfs float output' , @Bkrwfs = @Bkrwfs output
Select @Bkrs = Count(*) from SHExamGrapeScore where YearID = @YearID and
ClassID = @ClassID and SubjectScore >=@Bkrwfs and SubjectID = @SubjectID
update SHTempTable Set zdrs = @Zdrs ,Bkrs = @Bkrs where YearID= @YearID and ClassID= @ClassID and SubjectID =@SubjectID
fetch next from RWCursor into @YearID,@ClassID,@SubjectID
end
close RWCursor
Deallocate RwCursor
GO