一、循环结构:WHILE,根据某些条件,重复执行一条T-SQL语句或语句块。
1、语法:
WHILE (条件)
BEGIN
语句块
END
2、例:
1)求1-100的累加
DECLARE @X INT=1,@SUM INT =0
WHILE @X<=100
BEGIN
SET @SUM=@SUM+@X
SET @X=@X+1
END
PRINT '1-100的累计结果为:'+CONVERT(VARCHAR(20),@SUM)--结果为5050
GO
二、退出循环关键字:CONTINUE、BREAK、RETURN
1、CONTINUE:可以让程序跳过CONTINUE关键字之后的语句不执行,回到WHILE循环的第一行命令;
例:求1-100之间的奇数和
DECLARE @X INT,@SUM INT
SELECT @X=1,@SUM=0
WHILE @X<=100
BEGIN
IF @X % 2=1
BEGIN
SET @SUM=@SUM+@X--为奇数,则累加
SET @X=@X+1
END
ELSE
BEGIN
SET @X=@X+1
CONTINUE----不为奇数,则不执行后面的语句,直接跳到WHILE的第一行命令
END
END
PRINT '1-100的奇数和:'+CONVERT(VARCHAR(100),@SUM)
GO--返回的结果为2500
2、BREAK:让程序完全跳出循环,结束WHILE循环的;
例:当@X=20 时,退出循环,并求@SUM的和
DECLARE @X INT=1,@SUM INT =0
WHILE @X<=100
BEGIN
IF @X=20
BEGIN
BREAK--当@X=20时,直接退出WHILE循环
END
ELSE
BEGIN
SET @SUM=@SUM+@X
SET @X=@X+1
END
END
PRINT '@SUM的值为:'+CAST(@SUM AS VARCHAR(20))
GO
3、RETURN:从查询或过程中无条件退出,RETURE语句可在任何时候用于从过程,批处理或语句块中退出,位于RETURN之后的语句不会被执行。
例:当@X=20 时,退出循环,并打印@SUM的和
DECLARE @X INT=1,@SUM INT =0
WHILE @X<=100
BEGIN
IF @X=20
BEGIN
RETURN--当@X=20时,直接退出WHILE循环,并且不执行后面的所有语句,包括PRINT语句
END
ELSE
BEGIN
SET @SUM=@SUM+@X
SET @X=@X+1
END
END
PRINT '@SUM的值为:'+CAST(@SUM AS VARCHAR(20))
--此句无法输出,即当遇到RETURN时,后面的语句都不执行,即使是未在循环语句,但在批处理
--内也不执行
GO
三、综合应用:九九乘法表
DECLARE @X INT=1--用于行
DECLARE @Y INT=1--用于列
DECLARE @Str VARCHAR(200)=''
PRINT '.........................九九乘法表..............................'+CHAR(10)
WHILE @X<=9
BEGIN
WHILE @Y<=@X
BEGIN
SET @Str=@Str+CAST(@X AS VARCHAR(2))+'×'+CAST(@Y AS VARCHAR(2))
+'='+CONVERT(VARCHAR(100),@X*@Y)+' '
SET @Y=@Y+1
END
SET @X=@X+1
SET @Y=1
PRINT @Str
SET @Str=''
END
GO