-
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
上述语句中参数说明如下:{
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}
上述语句中参数说明如下:{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所示。GO
IF (SELECT 状态FROM 场馆信息WHERE 场馆名称='足球场')='空闲'
BEGIN
PRINT '该场馆已经没人使用,可以出租'
SELECT * FROM 场馆信息WHERE 场馆名称='足球场'
END
ELSE
PRINT'该场馆已经有人预订了,非常抱歉'
GO
图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
上述语句中参数说明如下: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格式的参数含义类似。WHEN Boolean_expression THEN result_expression
[…n]
[ELSE else_result_expression]
END
4.WHILE循环语句
设置重复执行Transact-SQL语句或语句块的条件。当指定的条件为真时,重复执行循环语句。可以在循环体内设置BREAK和CONTINUE关键字,以便控制循环语句的执行过程。他的语法格式如下:
WHILE Boolean_expression
{sql_statement | statement_block}
[BREAK]
{sql_statement |statement_block}
[CONTINUE]
{sql_statement | statement_block}
上述语句中参数说明如下:{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]
}
上述语句中参数说明如下:{
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无条件退出语句GO
BEGIN
WAITFOR TIME '22:00'
DBCC CHECKALLOC
END
GO
无条件终止查询、存储过程或批处理的执行。存储过程或批处理中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语句,执行后返回发生错误的信息,具体代码如下所示:{sql_statement | statement_block}
END TRY
BEGIN CATCH
{sql_statement | statement_block}
END CATCH
USE 体育场管理系统
GO
IF (SELECT 状态 FROM 场馆信息 WHERE 场馆名称='足球场')='空闲'
BEGIN
PRINT '该场馆已经没人使用,可以出租'
SELECT * FROM 场馆信息 WHERE 场馆名称 ='足球场'
END
ELSE
PRINT'该场馆已经有人预订了,非常抱歉'
GO
执行上述代码,具体的结果如图4-8所示。GO
IF (SELECT 状态 FROM 场馆信息 WHERE 场馆名称='足球场')='空闲'
BEGIN
PRINT '该场馆已经没人使用,可以出租'
SELECT * FROM 场馆信息 WHERE 场馆名称 ='足球场'
END
ELSE
PRINT'该场馆已经有人预订了,非常抱歉'
GO
图4-8 使用TRY...CATCH错误处理语句
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式