进程控制的定义一般是指用来控制程序执行和进程分配的命令,泛指逻辑计算部分的控制。进程控制的类型进程控制的常见类型有八种:BEGIN...ENDWAITFORGOTOWHILEIF...ELSEBREAKRETURNCONTINUE下面将详细介绍每种进程控制的用法。BEGIN...ENDBEGIN...END语句用于将多个T-SQL语句组合成一个逻辑块。当流程控制语句必须执行包含两个或多个T-SQL语句的语句块时,请使用BEGIN...END语句。语法BEGINsql_statement...END例子我们在数据库“SQLDatabaseDevelopment”中打印出我们的公众号的名字DECLARE@AVARCHAR(20)SET@A='SQLDatabaseDevelopment'BEGINSELECT@AEND结果如下:SELECT@这里A是执行的命令语句。IF[...ELSE]IF[...ELSE]表示只能使用IF,或者IF和ELSE一起使用,表示条件判断。满足某个条件时,执行IF下面的语句,否则执行ELSE下面的语句StringDECLARE@AVARCHAR(20)SET@A='SQL数据库开发'IFLEN(@A)>5SELECT@A结果:这里的结果和上面的BEGIN...END是一样的,但是如果我们把条件改成大于8,结果可能不是这样的,朋友们可以试试。IF...ELSE语法IF<条件表达式>{命令行|程序块}ELSE{命令行|程序块}IF...ELSE示例如果字符串的长度大于10,则打印该字符串,否则打印"Thestringlengthistooshort"DECLARE@AVARCHAR(20)SET@A='SQLdatabasedevelopment'IFLEN(@A)>10SELECT@AELSESELECT'Thestringlengthistooshort'结果:显然是字符串"SQLdatabasedevelopment"长度不大于10,所以返回ELSE中的结果。WHILEWHILE是一个循环控制,当WHILE后面的条件满足时,可以循环执行WHILE后面的语句。通常与CONTINUE和BREAK一起使用,Break命令使程序完全跳出循环语句并结束WHILE命令,CONTINUE是让命令继续返回执行语法WHILE<条件表达式>{命令行|程序block}CONTINUE{commandline|programblock}BREAK{commandline|programblock}例子有一组数字从1到10,从1开始顺序,遇到偶数就跳过,遇到奇数就打印出来,并在遇到9时结束打印。DECLARE@iint;SET@i=0;WHILE(@i<10)BEGINSET@i=@i+1;IF(@i%2=0)BEGINPRINT('跳过偶数'+CAST(@iASvarchar));继续;ENDELSEIF(@i=9)BEGINPRINT('to'+CAST(@iASvarchar)+'toendprinting');休息;ENDPRINT@i;END结果如下:我们只正常打印出1-3-5-7,其他的要么跳过要么在9处结束。RETURNRETURN语句用于让程序无条件地从一个查询中返回、存储过程或批处理,后面的语句将不会被执行。如果您在存储过程中使用return语句,则此语句可以指定返回给调用应用程序、批处理或过程的整数;如果您没有为RETURN指定整数值,则存储过程将返回0。语法RETURN[整数表达式]示例BEGINPRINT(1);打印(2);返回;打印(3);--RETURN后的代码不会执行,因为会跳过当前批次PRINT(4);结束开始打印(5);END结果如下:RETURN后的3-4没有打印,说明在当前batch的RETURN后不执行,新的BEGIN...END不受上面RETURN的影响,所以打印5GOTOGOTO命令用于改变程序执行的流程,使程序跳转到标识符指定的程序行继续执行。GOTO指令虽然增加了程序设计的灵活性,但破坏了程序的结构,使程序结构复杂,难以测试。注意:语句标识符可以是数字或字母的组合,但必须以“:”结尾。而GOTO语句后的标识符不需要有“:”。GOTO语句和跳转标签可以在存储过程、批处理或语句块中的任何地方使用,但不能超出批处理的范围。语法GOTO标识符示例DECLARE@iINT;SET@i=1;PRINT@i;SET@i=2;PRINT@i;GOTOME;SET@i=3;--跳过这一行PRINT@i;ME:PRINT('Jumpedtome?');PRINT@i结果如下:从上面可以看出,跳转到ME时,打印GOTO之前的数字,跳过后面的数字,为WAITFOR暂停执行一条语句,直到指定点在时间或指定的间隔。注意:WAITFOR通常用于在特定的时间点或时间间隔自动执行某些任务。WAITFOR语句中不能包含打开游标和定义视图等操作。不要在包含事务的语句中使用WAITFOR语句,因为WAITFOR语句在执行时间点或时间间隔期间会一直持有对象的锁。当WAITFOR语句包含在事务中时,事务的其他语句需要访问锁定的数据对象。很容易出现死锁现象。指定时间点的语法WAITFORTIME
