SQL Server控制语句的基本应用
1.语句块(begin…end)
语句块语法如下:
begin
<sql语句或程序块>
end
begin…end用来设定一个语句块,可以将多条transact-sql语句封装起来构成一个语句块,在处理时,整个语句块被视为一条语句。begin…end经常用在条件语句中,如if…else 或while循环中。begin…end语句可以嵌套使用。
2.判断语句(if…else)
通常计算机是按顺序执行程序中的语句,但是在许多情况下,语句执行的顺序以及是否执行依赖于程序运行的中间结果,在这种情况下,必须根据某个变量或表达式的值作出判断,以决定执行哪些语句或不执行哪些语句。这时可以利用if…else语句作出判断,选择执行某条语句或语句块。
判断语句语法如下:
if <条件表达式>
<命令行或语句块1>
[ else [条件表达式]
<命令行或语句块2> ]
3 检测语句(if…exists)
if…exists语句用于检测数据是否存在,而不考虑与之匹配的行数。对于存在性检测而言,使用if…exists要比使用count(*)>0好,效率更高,因为只要找到第一个匹配的行,服务器就会停止执行select语句。
检测语句语法如下:
if [not] exists (select查询语句)
<命令行或语句块1>
[else]
<命令行或语句块2>
4 多分支判断语句(case…when)
case…when结构提供了比if…else结构更多的选择和判断机会,使用它可以很方便地实现多分支判断,从而避免多重if…else语句嵌套使用。多分支判断语句case…when语法有两种格式:
第一种格式语法如下:
case <算术表达式>
when <算术表达式> then <运算式>
when <算术表达式> then <运算式>
[else <算术表达式>]
end
第二种格式语法如下:
case
when <条件表达式> then <运算式>
when <条件表达式> then <运算式>
[else <运算式>]
end
5 循环语句(while)
循环语句可以设置重复执行sql语句或语句块的条件,只要指定的条件为true(条件成立),就重复执行语句。
循环语句语法如下:
while <条件表达式>
begin
<命令行或程序块>
[break]
[continue]
[命令行或程序块]
end
6 跳转语句(goto)
使用跳转语句goto可以改变程序执行的流程,使程序跳到标有标识符的指定程序行,再继续往下执行,作为跳转目标的标识符可以是数字与字符的组合,但必须以“:”结尾。
跳转语句语法如下:
goto 标识符:
7 返回语句(return)
返回语句用于结束当前程序的执行返回到上一个调用它的程序或其它程序,在括号内可指定一个返回值。返回语句可使程序从批处理、存储过程、触发器中无条件退出,不再执行return之后的任何语句。返回语句语法如下:
return ([整数值])
8 延期执行语句(wait…for)
waitfor语句用来暂时停止程序执行,直到所设定的等待时间已过或所设定的时刻已到,才继续往下执行。其中时间必须为datetime 类型的数据,延迟时间和时刻均采用“hh:mm:ss”格式,在waitfor语句中不能指定日期,并且时间长度不能超过24小时。
延期执行语句语法如下:
waitfor { delay <‘时间'> | time <‘时间'> }
sql_statement
delay:用来设定等待的时间间隔,最多可达24 小时。
time:用来设定等待结束的时间点。
sql_statement:设定的等待时间已过或所设定的时刻已到,要继续执行的sql操作语句。