流程控制是一般开发工具里必备的功能,今天我们来讲讲SQL Server里的流程控制。其中包含IF...ELSE,WHILE
1、IF...ELSE流程控制元素
IF...ELSE元素用于根据条件来控制代码的执行流程。如果条件取值为TRUE,则执行指定的语言和语句块:如果条件取值为FALSE或UNKNOWN,则执行指定的另一语句或语句块。
例如,以下代码检查今天是否是一年的最后一天,如果是,代码打印输出消息,说今天是一年的最后一天,如果不是,则打印输出消息说今天不是一年的最后一天:
IF YEAR(CURRENT_TIMESTAMP)<>YEAR(DATEADD(DAY,1,CURRENT_TIMESTAMP))
PRINT '今天是一年的最后一天'
ELSE
PRINT '今天不是一年的最后一天'
注:其中的YEAR是函数,CURRENT_TIMESTAMP是当前时间,具体到豪秒
如果需要控制的流程分支超过两个,则可以使用嵌套的IF...ELSE元素。例如:
a、今天是一年的最后一天。
b、今天是一个月的最后一天,但不是一年的最后一天。
c、今天不是一个月的最后一天。
IF YEAR(CURRENT_TIMESTAMP) <> YEAR(DATEADD(DAY,1,CURRENT_TIMESTAMP))
PRINT '今天是一年的最后一天。'
ELSE
IF MONTH(CURRENT_TIMESTAMP) <> MONTH(DATEADD(DAY,1,CURRENT_TIMESTAMP))
PRINT '今天是一个月的最后一天,但不是一年的最后一天。'
ELSE
PRINT '今天不是一个月的最后一天。'
2、WHILE流程控制元素
当在WHILE关键字后指定的条件为TRUE时,WHILE元素可以重复执行一条语句或语句块,当指定的条件取值为FALSE或UNKNOWN时,循环将会终止。
例如,编写一个执行10次的循环:
DECLARE @i AS INT;
SET @i=1
WHILE @i <= 10
BEGIN
PRINT @i;
SET @i = @i +1;
END;
代码先声明一个计数器变量@i,并初始化为1,接着只要变量的值小于10就一直循环,在每次循环中,循环体中的代码打印变量@i的值,接着把它的值增加1.结果可以自行执行一下。
如果想在循环内某处退出当前循环,继续执行循环体之后的语句,可以使用BREAK语句。例如,当变量@i等于6时,就退出循环:
DECLARE @i AS INT;
SET @i=1
WHILE @i <= 10
BEGIN
IF @i = 6 BREAK;
PRINT @i;
SET @i = @i +1;
END;
如果想在循环体内某处忽略当前循环的剩余处理,继续进行下一次循环,可以使用CONTINUE命令,例如,在第6次进入循环体时,忽略从IF语句之后直到循环体结束之前出现的其他操作:
DECLARE @i AS INT;
SET @i=1
WHILE @i <= 10
BEGIN
SET @i = @i +1;
IF @i = 6 CONTINUE;
PRINT @i;
END;
T-SQL中的8个流程控制语句关键字
在T-SQL中,与流程控制语句相关的关键字有8个:
其中的 GOTO ,WAITFOR不常用,就不讲解了,有兴趣的可以去搜索一下这两个的用法,今天的流程控制就介绍到这里了,希望能帮助到大家~