加入收藏 | 设为首页 | 会员中心 | 我要投稿 广州站长网 (https://www.020zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

数据库 T-SQL流控制语句3 MSSQL 学习笔记4

发布时间:2022-10-16 19:31:11 所属栏目:MsSql教程 来源:未知
导读: 流程控制语句
Transact-SQL提供称为控制流语言的特殊关键字,用于控制Transact-SQL语句、语句块和存储过程的执行流。
4.3.1流程控制语句 4.3.1.1 BEGIN…END语句
BEGIN…END语句用于将多个

流程控制语句

Transact-SQL提供称为控制流语言的特殊关键字,用于控制Transact-SQL语句、语句块和存储过程的执行流。

4.3.1流程控制语句 4.3.1.1 BEGIN…END语句

BEGIN…END语句用于将多个Transact-SQL语句组合为一个逻辑块。当流程控制语句必须执行一个包含两条或两条以上的T-SQL语句的语句块时,使用BEGIN…END语句。语法如下:

BEGIN
{sql_statement…}
END

其中,sql_statement是指包含的Transact-SQL语句。

BEGIN和END语句必须成对使用,任何一条语句均不能单独使用。BEGIN语句后为Transact-SQL语句块。最后,END语句行指示语句块结束。

4.3.1.2 IF判断

在SQL Server中为了控制程序的执行方向,也会像其他语言(如C语言)有顺序、选择和循环3种控制语句,其中IF就属于选择判断结构。IF结构的语法如下:

IF Boolean_expression
{sql_statement|statement_block}

其中Boolean_expression可以是各种表达式的组合,但表达式的值必须是逻辑值“真”或“假”。其中命令行和程序块可以是合法Transact-SQL任意语句,但含两条或两条以上的语句的程序块必须加BEGIN…END子句

执行顺序是:遇到选择结构IF子句,先判断IF子句后的条件表达式,如果条件表达式的逻辑值是“真”,就执行后面的命令行或程序块,然后再执行IF结构下一条语句;如果条件式的逻辑值是“假”,就不执行后面的命令行或程序块,直接执行IF结构的下一条语句。

4.3.1.3 IF…ELSE选择

IF Boolean_expression
{sql_statement|statement_block}
Else
{sql_statement|statement_block}

如果逻辑判断表达式返回的结果是“真”,那么程序接下来会执行命令行1或程序块1;如果逻辑判断表达式返回的结果是“假”,那么程序接下来会执行命令行2或程序块2。无论哪种情况,最后都要执行IF…ELSE语句的下一条语句。

4.3.1.4 CASE语句

使用CASE语句可以很方便的实现多重选择的情况,比IF…THEN结构有更多的选择和判断的机会,可以避免编写多重的IF…THEN嵌套循环。

Transact-SQL支持CASE有两种语句格式。

简单CASE函数:

CASE input_expression
WHEN when_expression THEN result_expression
[ …n ]
[ELSE else_result_expression]
END
CASE搜索函数:
CASE
WHEN Boolean_expression THEN result_expression
[ …n ]
[ELSE else_result_expression]
END

参数说明:

input_expression:使用简单CASE格式时所计算的表达式。input_expression是任何有效的Microsoft? SQL Server?表达式。

WHEN when_expression:使用简单CASE格式时input_expression所比较的简单表达式。when_expression是任意有效的SQL Server表达式。input_expression和每个when_expression的数据类型必须相同,或者是隐性转换。

n:占位符,表明可以使用多个WHEN when_expression THEN result_expression子句或WHEN Boolean_expression THEN result_expression子句。

THEN result_expression:当input_expression = when_expression取值为TRUE,或者Boolean_expression取值为TRUE时返回的表达式。result_expression是任意有效的SQL Server表达式。

ELSE else_result_expression:当比较运算取值不为TRUE时返回的表达式。如果省略此参数并且比较运算取值不为TRUE,CASE将返回NULL值。else_result_expression是任意有效的SQL Server 表达式。else_result_expression和所有result_expression的数据类型必须相同,或者必须是隐性转换。

WHEN Boolean_expression:使用CASE搜索格式时所计算的布尔表达式。Boolean_expression是任意有效的布尔表达式。

下面介绍简单CASE函数和CASE搜索函数两种格式的执行顺序。

简单CASE函数:

(1)计算input_expression,然后按指定顺序对每个WHEN子句的input_expression = when_expression进行计算。

(2)返回第一个取值为TRUE的(input_expression = when_expression)的result_expression。

(3)如果没有取值为TRUE的input_expression = when_expressionMssql基本语句,则当指定ELSE子句时,SQL Server将返回else_result_expression;若没有指定ELSE子句,则返回NULL值。

--example
CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END
CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END
CASE SCORE WHEN 'C' THEN '中' ELSE '不及格' END
--等于
CASE WHEN SCORE = 'A' THEN '优'
     WHEN SCORE = 'B' THEN '良'
     WHEN SCORE = 'C' THEN '中' ELSE '不及格' END

4.3.1.5 WHILE循环

WHILE子句是T-SQL语句支持的循环结构。在条件为真的情况下,WHILE子句可以循环地执行其后的一条T-SQL命令。如果想循环执行一组命令,则需要使用BEGIN…END子句。

WHILE<条件表达式>
BEGIN
<命令行|程序块>
END

--求1到10之间的整数和
declare @number int,@sum int
select  @number=1,@sum=0
WHILE @number<=10
BEGIN
set @sum=@sum+@number
set @number=@number+1
END

遇到WHILE子句,先判断条件表达式的值,当条件表达式的值为“真”时,执行循环体中的命令行或程序块,遇到END子句会自动地再次判断条件表达式值的真假,决定是否执行循环体中的语句。只能当条件表达式的值为“假”时,才结束执行循环体的语句。

4.3.1.6 CONTINUE和BREAK

循环结构WHILE子句还可以用CONTINUE和BREAK命令控制WHILE循环中语句的执行。

语法:

WHILE<条件表达式>
BEGIN
<命令行|程序块>
[BREAK]
[CONTINUE]
[命令行|程序块]
END

CONTINUTE命令可以让程序跳过CONTINUE命令之后的语句,回到WHILE循环的第一行命令。

BREAK命令则让程序完全跳出循环,结束WHILE命令的执行。

在这里插入图片描述

4.3.1.7 RETURN退出

RETURN语句用于从查询过程中无条件退出。RETURN语句可在任何时候用于从过程、批处理或语句块中退出。位于RETURN之后的语句不会被执行。

语法:

RETURN[整数值]

在括号内可指定一个返回值。如果没有指定返回值,SQL Server系统会根据程序执行的结果返回一个内定值。

在这里插入图片描述

4.3.1.8 GOTO跳转

GOTO命令用来改变程序执行的流程,使程序跳到标识符指定的程序行再继续往下执行。

语法:
GOTO 标识符
标识符需要在其名称后加上一个冒号“:”。

在这里插入图片描述

4.3.1.9 WAITFOR挂起

WAITFOR指定触发器、存储过程或事务执行的时间、时间间隔或事件;还可以用来暂时停止程序的执行,直到所设定的等待时间已过才继续往下执行。

语法:

WAITFOR DELAY<’时间’>|TIME<’时间’>

其中“时间”必须为DATETIME类型的数据,如“12:23:47”,但不能包括日期。各关键字含义如下:

DELAY:用来设定等待的时间,最多可达24小时。

TIME:用来设定等待结束的时间点。

在这里插入图片描述

看完不点赞,快乐少一半

(编辑:广州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!