T-SQL流程控制语句

时间:2022-04-15 00:46:40

1.    选择结构

IF <布尔表达式>

   <语句1>

[ELSE

   <语句2>]

5-7 查找学号为1001的学生。

if exists(select sno from s where sno='1001'

   print '找到学号为1001的学生'

else

   print '没有找到学号为1001的学生'

5-8 条件语句的嵌套。

DECLARE @score smallint

SET @score=(SELECT score FROM sc WHERE sno='1001' and cno='c002')

IF @score>=90

   PRINT '优秀'

ELSE IF @score>=70

   PRINT '良好'

ELSE IF @score>=60

   PRINT '及格'

ELSE

   PRINT '不及格'

注:

·一条IFELSE后必须为一条Transact-SQL语句,如果有多条Transact-SQL语句,必须使用BEGIN/END

2.    循环结构

·循环语句:WHILE <布尔表达式>

               <语句>

·中断语句:BREAK

·短路语句:CONTINUE

5-9 1~10之间的奇数和。

declare @i smallint,@sum smallint

set @i=0

set @sum=0

while @i>=0

  begin

    set @i=@i+1

    if @i<=10

       if (@i%2)=0

         continue

       else

         set @sum=@sum+@i

    else

        begin

          print 'sum='+str(@sum)

          break

        end

  end

5-10 100~200之间的全部素数。

declare @m tinyint,@i tinyint

set @m=101

while @m<=200

  begin

    set @i=2

    while @i<=sqrt(@m)

      begin    

        if (@m%@i=0)

           break

        set @i=@i+1

      end

    if (@i>sqrt(@m))

       print @m

    set @m=@m+2

  end

注:

·WHILE后必须为一条Transact-SQL语句,如果有多条Transact-SQL语句,必须使用BEGIN/END

3.    转移语句

语句格式:GOTO <标号>

5-11 利用转移语句和条件语句求10的阶乘。

declare @s int,@times int

set @s=1

set @times=1

label1:

set @s=@s+@times

set @times=@times+1

if @times<=10

  goto label1

print '结果为:'+str(@s)

4.    等待语句

语句格式:WAITFOR DELAY '<时间间隔>'|TIME '<时间>'

其中,时间间隔和时间均为datetime类型,但不包括日期,其格式为“hh:mm:ss”,分别说明等待的时间长度和时间点。

5-12 设置等待一小时后执行查询。

begin

  waitfor delay '1:00:00'

  select * from s

end

5-13 设置到十点整执行查询。

begin

  waitfor time '10:00:00'

  select * from s

end

5.    返回语句

语句格式:RETURN [<整数表达式>]

其中,如果没有指定返回值,返回值为0时表示程序成功执行,返回值为负数时表示不同的出错原因。