–可以嵌套
–没有{},使用begin…end
–不能使用true/false,只能使用条件表达式
–如果里面只有一句就可以不使用begin…and包含
–可以使用continue/break
示例:如果科目名称office不及格的人数超过半数(考试题出难了),则给每个人增加2分,循环加,直到不及格的人数少于一半
declare @subjectName varchar(20) = 'office' --定义科目为office
declare @subjectID varchar(10) = (select subjectID from subject where subjectName = @subjectName) --定义科目id
declare @allNumber int = (select count(*) from result where SubjectID = @subjectID) -- 此科目下一共有多少人数
declare @noPassNumber int = (select count(*) from result where SubjectID = @subjectID and StudentResult < 60) -- 此科目不及格有多少人数
while(1=1)
begin
if(@noPassNumber > 1.0*@allNumber/2)
begin
update result set StudentResult = StudentResult + 2 where SubjectID = @subjectID and StudentResult <=98
set @noPassNumber = (select count(*) from result where SubjectID = @subjectID and StudentResult < 60)
end
else
break
end
效果:
执行前:
执行后: