SQL Server 流程控制语句

概述
和其他高级语言一样,T-SQL中也有用于控制流程的语句,在没有流程控制语句的情况下,T-SQL语句是按照从上到下的顺序逐个执行的
使用控制流语句可以让开发人员可以基于某些逻辑进行选择性的跳转

流程控制语句的使用范围和GO关键字

流程控制语句只能用在单个批处理段,用户自定义的函数,存储过程。不能跨多个批处理段或者用户自定义函数和存储过程

这里重点讲T-SQL查询语句,所以只介绍批处理段。

批处理(批处理段)是客户端应用程序发送一条或多条T-SQL语句到SQL Server,SQL Server将批处理语句作为单个可执行单元。一个批处理段是由一个或多个语句组成的一个批处理,之前之所以叫批处理是因为所有语句一次性被提交到一个SQL实例(数据库引擎,一个SQL Server就代表一个实例)。在这个批处理范围内,局部变量是互相可见的。

而想让多个语句分多次提交到SQL实例上,则需要使用GO关键字。SSMS提供了一个客户端命令GO,可以发出一批T-SQL语句结束的信号。注意:GO是客户端的工具,而不是T-SQL的服务命令。

当遇到GO关键字时,当前GO之前的语句会作为一个批处理直接传到SQL实例执行。所以不在同一个批处理内部局部变量不可见,也不可对跨批处理的语句使用流程控制语句

在同一个批处理中局部变量相互可见:

 

在不同批处理中局部变量不可见:

 

在不同批处理中,流程控制流语句不能跨批处理:

T-SQL中的8个流程控制语句的关键字

 

下面对上述关键字进行讲解

BEGIN..END关键字

BEGIN..END关键字是流程控制语句中最基本的关键字,用于将多个语句划分为逻辑上的一部分。类似JAVA中的花括号‘{}’

WHILE/BREAK/CONTINUE关键字

在T-SQL的流程控制语句中,循环语句中只有WHILE循环。WHILE除了被用于流程控制语句的循环之外,还经常被用于游标中。

1.WHILE关键字和其他高级语言中的WHILE关键字几乎一模一样,WHILE循环可以利用BREAK和CONTINUE控制流程。

2.CONTINUE关键字用于结束本次循环,直接开始下一次循环。

3.BREAK关键字用于直接跳出WHILE循环语句。

双重循环的效果也和JAVA一样,关键字只作用在自己所在的循环体中。

一个简单的例子:从1循环到10,循环到7时,结束本次循环继续下一次循环,循环到8时,结束整个循环

 

IF..ELSE关键字

IF..ELSE关键字实现了非此既彼的逻辑,和其他高级语言中的IF语句具有完全一样的使用方法,这里就不在讲述了,集体例子看上图。

IF语句经常会与EXISTS关键字相结合来判断数据表中指定的数据是否存在,比如:

IF (EXISTS (SELECT 1 FROM table_name WHERE column IS NOT NULL ))

    BEGIN

        PRINT ‘Something is null in this table’;

    END

GOTO关键字

GOTO关键字的使用非常简单,定义一个跳转的标签(字段), GOTO+标签,标签+‘:’+需要执行的内容。标签像JAVA里面的封装好的方法,GOTO+标签就是调用方法。可以让程序跳转到一个指定的标签处并执行其后的代码,最佳实践只使用在错误处理中。

IF(@@ERROR<>0)

    BEGIN

        GOTO xxx

    END

xxx: SELECT * FROM table_name WHERE @@ERROR IS NOT NULL;

RETURN关键字

RETURN关键字是最简单直接无条件告诉服务器跳出某个批处理段/自定义函数/存储过程的方式。

 

很多人会把RETURN语句和RAISERROR函数搞混,区别在于RAISERROR会引发错误,但不会终止程序往下进行。

 

WAITFOR关键字

WAITFOR关键字分为两种类型,一种是延时执行WAITFOR DELAY+‘hh:mm:ss’,另一种是指定时间执行WAITFOR TIME+‘hh:mm:ss’,不支持日期

WAITFOR TIME '00:00:00'

    BEGIN

        PRINT 'YES';                -----表示晚上12点才打印YES

    END
WAITFOR DELAY '00:00:05'

    BEGIN

        PRINT 'NO';                ------表示延时5秒才打印NO

    END

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值