VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > MongoDB >
  • SQL Server 2008教程之控制流程

控制流程

在程序设计语言中,需要使用一些语句组织形式来控制程序的运行。这些程序设计语言的基本结构分为顺序结构、条件分支结构和循环结构。顺序结构是一种自然结构,条件分支结构和循环结构都需要根据程序的执行状况对程序的执行顺序进行调整和控制。在Transact-SQL语言中,流程控制语句就是用来控制程序执行流程的语句,也称流控制语句或控制流语句。下面将对主要的流程控制语句进行介绍。
1.BEGIN…END语句块
BEGIN…END可以定义Transact-SQL语句块,这些语句块作为一组语句执行,允许语句嵌套;关键字BEGIN定义Transact-SQL语句的起始位置,END标识同一块Transact-SQL语句的结尾。下面结合示例详细介绍关键字BEGIN…END,语法格式为:
BEGIN
{
sql_statement︱statement_block
}
END
上述语句中参数说明如下:
l   sql_statement  使用语句块定义的任何有效的Transact-SQL语句。
l   statement_block  使用语句块定义的任何有效的Transact-SQL语句块。
2.IF…ELSE条件语句
用于指定Transact-SQL语句的执行条件。如果条件真,则执行条件表达式后面的Transact-SQL语句。当条件为假时,可以使用ELSE关键字指定要执行的Transact-SQL语句。
他的语法格式为:
IF Boolean_expression
{sql_statement|statement_block}
ELSE
{sql_statement|statement_block}
上述语句中参数说明如下:
l   Boolean_expression  返回true或false的表达式。如果布尔表达式中含有SELECT语句,必须用圆括号将SELECT语句括起来。
l   sql_statement  使用语句块定义的任何有效的Transact-SQL语句。
l   statement_block  使用语句块定义的任何有效的Transact-SQL语句块。
例如,使用IF…ELSE条件语句根据相应场馆的使用状态执行不用的Transact-SQL语句,具体代码如下所示:
USE 体育场管理系统
GO
IF (SELECT 状态FROM 场馆信息WHERE 场馆名称='足球场')='空闲'
BEGIN
PRINT '该场馆已经没人使用,可以出租'
SELECT * FROM 场馆信息WHERE 场馆名称='足球场'
END
ELSE
 PRINT'该场馆已经有人预订了,非常抱歉'
GO
执行上述语句,结果如图4-7所示。

图4-7  使用IF…ELSE语句
3.CASE分支语句
CASE关键字可根据表达式的真假来确定是否返回某个值,可在允许使用表达式的任何位置使用这一关键字。使用CASE语句可以进行多个分支的选择。CASE具有两种格式:
l   简单格式:将某个表达式与一组简单表达式进行比较以确定结果。
l   搜索格式:计算一组布尔表达式以确定结果。
(1)简单CASE格式的语法如下:
CASE input_expression
WHEN when_expression THEN result_expression
[…n]
[ELSE else_result_expression]
END
上述语句中参数说明如下:
l   input_expression  使用简单CASE格式时所计算的表达式,可以是任何有效的表达式。
l   when_expression  用来和input_expression表达式做比较的表达式,input_expression和每个when_expression的数据类型必须相同,或者是隐性转换。
l   result_expression  当input_expression=when_expression的取值为true时,需要返回的表达式。
l   else_result_expression  当input_expression=when_expression的取值为false时,需要返回的表达式。
(2)搜索CASE格式的语法如下:
CASE
WHEN Boolean_expression THEN result_expression
[…n]
[ELSE else_result_expression]
END
语句中参数的含义与简单CASE格式的参数含义类似。
4.WHILE循环语句
设置重复执行Transact-SQL语句或语句块的条件。当指定的条件为真时,重复执行循环语句。可以在循环体内设置BREAK和CONTINUE关键字,以便控制循环语句的执行过程。他的语法格式如下:
WHILE Boolean_expression
{sql_statement | statement_block}
[BREAK]
{sql_statement |statement_block}
[CONTINUE]
{sql_statement | statement_block}
上述语句中参数说明如下:
l   Boolean_expression  布尔表达式,可以返回true或false。如果布尔表达式中含有SELECT语句,必须用圆括号将SELECT语句括起来。
l   sql_statement  使用语句块定义的任何有效的Transact-SQL语句。
l   statement_block  使用语句块定义的任何有效的Transact-SQL语句块。
l   BREAK  导致从最内层的WHILE循环中退出,将执行出现在END关键字后面的任何语句块,END关键字为循环结束标记。
l   CONTINUE  使WHILE循环重新开始执行,忽略CONTINUE关键字后的任何语句。
5.WAITFOR延迟语句
WAITFOR语句可以将他之后的语句在一个指定的间隔之后执行,或在将来的某一指定时间执行。他可以悬挂起批处理、储存过程或事务的执行,直到发生以下情况为止:已超过指定的时间间隔、到达指定的时间。该语句是通过暂停语句的执行而改变语句的执行过程。他的语法如下:
WAITFOR
{
DELAY time | TIME time | (receive_statement) [TIMEOUT timeout]
}
上述语句中参数说明如下:
l   DELAY  可以继续执行批处理、存储过程或事务之前必须经过的指定时段,最长可以24小时。
l   Time  要等待的时间。可以使用datetime数据可接受的格式之一指定time,也可以将其指定为局部变量,不能指定日期。因此,不允许指定datetime值的日期部分。
l   TIME  指示SQL Server等待到指定时间。
l   receive_statemen  任何有效的RECEIVE语句。
例如下面的示例使用TIME关键字等到晚上10点执行【体育场管理系统】数据库检查来确保所有页已正确分配和使用:
USE 体育场管理系统
GO
BEGIN
    WAITFOR TIME '22:00'
    DBCC CHECKALLOC
END
GO
6.RETURN无条件退出语句
无条件终止查询、存储过程或批处理的执行。存储过程或批处理中RETURN语句后面的所有语句都不在执行。当在存储过程中使用该语句时,可以使用该语句指定返回给调用应用程序、批处理或过程的整数值。如果RETURN语句未指定值,则存储过程的返回值是0。他的语法格式如下:
RETUREN [integer_expression]
上述语句中integer_expression参数返回一个整数值。存储过程可向执行调用的过程或应用程序返回一个整数值。
7.GOTO跳转语句
使得Transact-SQL批处理的执行跳至指定标签的语句。也就是说,不执行GOTO语句和标签之间的所有语句。由于该语句破坏了结构化语句的结构,应该尽量减少该语句的使用。他的语法格式如下:
GOTO label
这里的Label参数指定要跳转到的语句标号,其名称要符合标识符的规定。
8.TRY...CATCH错误处理语句
如果TRY块内部发生错误,则会将控制传递给CATCH块中包含的另一个语句组。TRY...CATCH构造捕捉所有严重级别大于10但不终止数据库连接的错误。他的使用格式如下:
BEGIN TRY
{sql_statement | statement_block}
END TRY
BEGIN CATCH
{sql_statement | statement_block}
END CATCH
上述语句中参数sql_statement︱statement_block可以定义为任何有效的Transact-SQL语句或语句块。例如,下面的示例显示一个生成被字符串变量除的错误SELECT语句,执行后返回发生错误的信息,具体代码如下所示:
USE 体育场管理系统
GO
IF (SELECT 状态 FROM 场馆信息 WHERE 场馆名称='足球场')='空闲'
BEGIN
PRINT '该场馆已经没人使用,可以出租'
SELECT * FROM 场馆信息 WHERE 场馆名称 ='足球场'
END
ELSE
PRINT'该场馆已经有人预订了,非常抱歉'
GO
执行上述代码,具体的结果如图4-8所示。

图4-8  使用TRY...CATCH错误处理语句

相关教程