
Transact-SQL变量与运算符.ppt
27页单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第十一讲,Transact-SQL,变量与运算符,学习目标,局部变量,全局变量,程序设计的结构及掌握常用语句,程序设计的结构,几个常用设计语句,学习完本课程,您应该能够:,知识重、难点分析,重点:,局部变量赋值,程序设计的结构及掌握常用语句,程序设计的结构,难点:,常用全局变量,几个常用设计语句,变量,定义:,变量是指在程序运行过程中,其值可以发生变化的量,通常用来保存程序运行过程中的输入数据,计算获得的中间结果和最终结果分类:,在,SQL Server,中,变量可分为:,局部变量,全局变量,局部变量,定义:,局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部局部变量可作为计数器来计算循环执行的次数,或控制循环执行的次数另外,利用局部变量还可以保存数据值,以供控制流语句测试以及保存由存储过程返回的数据值等和其他高级语言一样,要使用局部变量,必须在使用前首先用,declare,语句定义赋值:,declare,变量名 数据类型,select,变量名,=,表达式,from ,where ,局部变量,说明,:,可以使用,select,变量名,输出变量值。
在局部变量没有被赋值之前,它的值是,null,通常情况下,一条,select,赋值语句只能返回一行,如果一条,select,赋值语句在检索数据后返回了多行,则只将返回的最后一行的值赋给了局部变量局部变量,赋值:,declare a,tinyint,update,学生表,set a=,年龄,where,学号,=,08001,select a,年龄,或者,declare a,tinyint,select a=,年龄,from,学生表,where,学号,=,08001,select a,年龄,局部变量,全局变量,定义:,全局变量是,SQL Server,系统内部使用的变量,其作用范围并不仅仅局限于某一程序,而是任何程序均可随时调用全局变量通常存储一些,SQL Server,的配置设定值和统计数据用户可以在程序中用全局变量来测试系统的设定值或,Transact-SQL,命令执行后的状态值注意:,全局变量不是由用户的程序定义的,而是在服务器级定义的用户只能使用预先定义的全局变量引用全局变量时,必须以标记符,“,”,开头局部变量的名称不能与全局变量的名称相同全局变量,1,、,rowcount,前一条,SQL,语句处理的行数。
除了,declare,语句之处,其他任何语句都可以改变,rowcount,的值2,、,error,前一条,SQL,语句报告的错误号如果,error,为非,0,值,则表明执行过程中产生了错误3,、,identity,上次,insert,操作中使用的,indentity,值该全局变量返回最后插入的标识值程序语句,1,、注释符,2,、批处理,3,、块语句,begin,end,4,、判断语句,if,else,5,、,if exists,语句,6,、,case,语句,7,、,print,语句,程序流程,结构,顺序型结构,判断选择型结构,if,else case,循环控制结构,while,1,、注释符,注释是程序代码中不执行的文本字符串(也称为注解),注释符是对程序的说明,一般穿插在程序中并以特殊的标记标注出来在,Transact-SQL,中可使用两类注释符,:,ANSI,标准的两个连字符构成的注释符,-,用于单行注释与,C,语言相同的程序注释符号,即,/*,*/,/*,”,用于注释文字的开头,”,*/,”,用于注释文字的结尾,可在程序中标识多行文字为注释2,、批处理,两个,GO,之间的,SQL,语句作为一个批处理。
在一个批处理中,可包含一条或多条,Transact-SQL,语句,成为一个语句组这样的语句组从应用程序一次性地发送到,SQL Server,服务器进行执行SQL Server,服务器将批处理编译成一个可执行单元,称为执行计划3,、块语句,begin,end,begin,SQL,命令行或程序块,end,说明:,begin,end,用来设定一个程序块,在,begin,end,内的所有程序将被视为一个单元执行尽管,begin,end,几乎可以用在程序中的任何地方,但它最常见的用法是和,while,或,if,else,组合使用在,begin,end,中可嵌套另外的,begin,end,来定义另一程序块4,、判断语句,if,else,if,else,说明:,if,else,用来判断当某一条件成立时,执行某段程序,条件不成立时执行另一段程序其中,条件表达式,可以是各种表达式的组合,但表达式的值必须是逻辑值,“,真,”,或,“,假,”,如果不使用语句块,,if,或,else,只能执行一条命令if,else,语句可以进行嵌套If,(Select,avg,(,年龄,),From,学生表,Where,班级,=,wj0801,)=19,Select,平均年龄超过,18,岁,Else,Select,平均年龄不超过,18,岁,5,、,if exists,语句,if exists,语句用于检测数据是否存在,而不考虑与之匹配的总共行数。
if not exists(select,子查询,),else,说明,:,SQL,服务器只要找到第一个匹配的行,(,记录,),就停止执行,select,子查询语句if,语句最多可嵌套,150,层if exists,(select*,from,学生表,where,姓名,=,肖一竹,and,班级,=,wj0801,),select,肖一竹存在,else,select,没有肖一竹同学,6,、,case,语句,多分支选择结构,case,通常用,n,个条件来控制,n+1,个操作case,语句有两种格式,:,1)case,when then,when then ,else,end,2)case,when then,when then,else ,end,例,调整学生的成绩,:,凡低于,70,分的增加,10%,7080,分的增加,8%,8090,分的增加,5%,其他的增加,2%,update,成绩表,set,成绩,=,case,when,成绩,=70 and,成绩,=80 and,成绩,90 then,成绩*,1.05,else,成绩*,1.02,end,Select,学号,课程号,考核等级,=,case,when,成绩,=60 and,成绩,=75 and,成绩,85 then,优良,else,优秀,End,From,学生选课表,7,、,print,语句,print,语句用于把消息传递到客户应用程序的消息处理程序,通常在屏幕上显示。
print,任何,ASCII,文本,|,局部变量名,|,全局变量名,|,字符串表达式,说明,:,print,语句向客户端返回一个用户自定义的信息,即显示一个字符串,(,其最长为,255,个字符串,),、局部变量或全局变量如果变量的值不是字符串,须先用数据类型转换函数,(convert),将其转换为字符串表达式的长度可以超过,8000,个字符,但超过,8000,的字符将不会显示循环语句,while,使用,while,循环结构,可根据条件多次重复执行一条语句或一个语句块,.,while,begin,break,continue,SQL,命令行或语句块,end,Declare x,int,y,int,z,int,Select x=1,y=1,While x3,Begin,Print x,While y3,Begin,Select z=100*,x+y,Print z,Select y=y+1,End,Select x=x+1,Select y=1,end,小结,局部变量赋值,程序设计的结构及掌握常用语句,程序设计的结构,。












