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 '不及格'
注:
·一条IF或ELSE后必须为一条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时表示程序成功执行,返回值为负数时表示不同的出错原因。