《SQL流程控制语句.ppt》由会员分享,可在线阅读,更多相关《SQL流程控制语句.ppt(23页珍藏版)》请在三一办公上搜索。
1、流程控制语句,变量,SQL Server的变量分为两种:用户自己定义的局部变量 开头的标识符表示局部变量系统定义和维护的全局变量 开头的标识符表示全局变量,局部变量,局部变量的作用范围:定义局部变量的批处理、存储过程、触发器或语句块。1.局部变量的定义DECLARE 局部变量名 数据类型,n注意:变量不能是text、ntext或image数据类型。,例:定义变量sname为nvarchar(10)类型,定义变量snum为int类型,例:定义变量snum为int类型:,DECLARE snum int,DECLARE sname nvarchar(10),snum int,不能有空格,(1)用S
2、ET语句给局部变量赋值 SET 局部变量名=变量值(2)在查询语句SELECT中给局部变量赋值 SELECT局部变量名=变量值,n,2.局部变量的赋值,局部变量在赋值之前,默认为NULL。如果在程序中引用它,必须要先为其赋值。,P136,3.局部变量的输出,PRINT局部变量注:变量的输出仅用于DBA调试时使用。,T-SQL也提供了用于编写过程性代码的语法结构,可用于进行顺序、分支、循环等程序设计。,BEGINEND,语句块的界定,相当于C语言中的“”BEGIN sql_statement|statement_block END,P145,IFELSE,IF Boolean_expressio
3、n sql_statement|statement_block ELSE sql_statement|statement_block DECLARE x int,y intSET x=1SET y=4IF xy PRINT xyELSE PRINT xy,-布尔表达式,进行条件判断,-定义变量,-给变量赋值,练习:学生的成绩表中,如果3-105课程平均成绩在80分以上则显示“考试成绩不错”否则显示“需要继续努力”。USE SchoolIF(SELECT AVG(Degree)FROM Score WHERE Cno=3-105)80 PRINT成绩不错ELSE PRINT需要继续努力,3-10
4、5的平均成绩80,如果布尔表达式中含有 SELECT 语句,必须用圆括号将 SELECT 语句括起来,练习:判断“陆君”是否在95033班,如果在输出”陆君在95033班”否则输出“陆君不在95033班”USE SchoolIF EXISTS(SELECT*FROM Student WHERE Sname=陆君 AND Class=95033)PRINT 陆君在95033班ELSE PRINT 陆君不在95033班,陆君在95033班,练习:判断“陆君”是否在95033班,如果在输出”陆君在95033班”否则输出“陆君不在95033班”USE SchoolGOIF 陆君 in(SELECT S
5、name FROM Student WHERE Class=95033)PRINT 陆君在95033班ELSE PRINT 陆君不在95033班,练习:判断“陆君”是否在95033班,如果在输出”陆君在95033班”否则输出“陆君不在95033班”USE SchoolIF 95033=(SELECT Class FROM Student WHERE Sname=陆君)PRINT 陆君在95033班ELSE PRINT 陆君不在95033班,多条件分支选择 CASE,(1)简单表达式CASE input_expression WHEN THEN.n ELSE END,2)选择表达式CASE WH
6、EN THEN.n ELSE END,CASE具有以下两种格式:(1)简单表达式,将某个表达式与一组简单表达式进行比较以确定结果。(2)选择表达式,计算一组布尔表达式以确定结果。,例:用CASE语句,根据教师的职称来分级,USE SchoolSELECT Tname,depart,CASE Prof WHEN 教授THEN 高级职称 WHEN 副教授THEN 高级职称 WHEN 讲师THEN 中级职称 WHEN 助教THEN 初级职称 ELSE 无职称 ENDFROM Teacher,只做临时显示,并不对表进行修改,例:利用CASE语句对学生的成绩进行评价,USE SchoolSELECT S
7、no,Cno,CASE WHEN Degree=90 THEN A WHEN Degree=80 THEN B WHEN Degree=70 THEN C WHEN Degree=60 THEN D ELSE E END AS RankFROM ScoreORDER BY Sno,循环语句 WHILE,WHILE Boolean_expression sql_statement|statement_block BREAK-跳出本层循环 sql_statement|statement_block CONTINUE-跳出本次循环 sql_statement|statement_block,-布尔表
8、达式,进行条件判断,练习:计算从1加到100并输出结果。DECLARE sum100 int,i intSET sum100=0SET i=0WHILE i=100 BEGIN SET sum100=sum100+i SET i=i+1 ENDPRINT sum100,下列语句实现的什么功能WHILE(SELECT AVG(Degree)FROM Score WHERE Cno=3-105)=100 BREAKENDSELECT*FROM Score WHERE Cno=3-105,-计算3-105课的平均成绩,-将3-105课的成绩提高5分,/*如果3-105课的最高成绩大于100分则跳出循
9、环*/,跳转语句 GOTO,GOTO语句将程序无条件地转到相应的标签的语句。DECLARE sum100 int,i intSELECT sum100=0,i=0My_Loop:SET sum100=sum100+iSET i=i+1IF i=100 GOTO My_LoopPRINT sum100,标签要符合命名规则,并且有“:”,不利于程序阅读,不符合结构化程序的三种思想,因此不提倡用GOTO语句,延时语句 WAITFOR,WAITFOR语句可以将它之后的语句在一个指定的时间间隔之后执行,或在未来的某一指定时间执行。WAITFOR DELAY 延时时间|TIME 到达时间 WAITFOR
10、DELAY 0:00:05PRINT 时间到!WAITFOR TIME 20:00:00PRINT 下课喽!,-五秒钟后显示“时间到!”,必须是datetime数据类型,但不能包含日期部分,必须是datetime数据类型,但不能包含日期部分,不超过24小时,函数,P1511.字符串函数2.日期和时间函数3.数学函数4.系统函数,批处理,批处理是包含一个或多个T-SQL语句的组,从应用程序一次性地发送到SQL Server执行。GO是一个批处理的结束语句。GO不是T-SQL语句,但是可以被查询分析器识别。GO命令和Transact-SQL语句不可在同一行上。但在GO命令行中可包含注释。,P143,