1、第六章第六章表达式与流程控制表达式与流程控制常量、变量及表达式常量、变量及表达式流程控制语句及注释语句流程控制语句及注释语句常量也称为标量值,是表示一个特定数据值的符号。常量的格常量也称为标量值,是表示一个特定数据值的符号。常量的格式取决于它所表示的值的数据类型。式取决于它所表示的值的数据类型。1.字符串常量字符串常量 字符串常量用单引号括起来。如果要在字符串中包含单字符串常量用单引号括起来。如果要在字符串中包含单引号,则可以使用连续的两个单引号来表示。例如:引号,则可以使用连续的两个单引号来表示。例如:Chinese2.datetime常量常量 datetime常量使用单引号括起来的特定格式
2、的字符日常量使用单引号括起来的特定格式的字符日期值表示。例如:期值表示。例如:2011-09-16 14:30:24 变量是可以保存特定类型的单个数据值的对象,变量是可以保存特定类型的单个数据值的对象,SQL Server的变量分为两种:用户自己定义的局部变量和系统提供的全局变量。的变量分为两种:用户自己定义的局部变量和系统提供的全局变量。局部变量的作用范围仅限制在程序的内部。常用来保存临时数局部变量的作用范围仅限制在程序的内部。常用来保存临时数据。据。局部变量的定义:局部变量的定义:DECLARE 局部变量名局部变量名 数据类型数据类型,n注:注:局部变量名局部变量名:必须以必须以开头,符合
3、标识符的命名规则开头,符合标识符的命名规则 局部变量定义后初始值为局部变量定义后初始值为NULL。【例例】定义变量定义变量MyCounter为为int类型:类型:DECLARE MyCounter int2.局部变量的赋值局部变量的赋值(1)用)用SET语句给局部变量赋值语句给局部变量赋值 格式格式:SET 局部变量名局部变量名=表达式表达式【例】定义局部变量【例】定义局部变量myvar,并为其赋值,最后显示,并为其赋值,最后显示myvar的值。的值。DECLARE myvar char(20)SET myvar=This is a test -用用SET赋值赋值 PRINT myvar -用
4、用PRINT语句显示语句显示【例例】DECLARE StuID char(10)DECLARE StuName varchar(20)SET StuID=A00001 SELECT StuName=StuName FROM Student WHERE StuID=StuID PRINT StuName SQL Server运算符有以下几类:运算符有以下几类:n 算术运算符算术运算符n 字符串串联运算符字符串串联运算符n 赋值运算符赋值运算符n 比较运算符比较运算符n 逻辑运算符逻辑运算符n 位运算符位运算符n 一元运算符一元运算符流程控制语句用于控制流程控制语句用于控制Transact-SQL
5、语句、语句块和存储过程的执行语句、语句块和存储过程的执行流程。这些语句可用于流程。这些语句可用于Transact-SQL语句、批处理和存储过程中。如语句、批处理和存储过程中。如果不使用流程控制语句,则各果不使用流程控制语句,则各Transact-SQL语句按其出现的先后顺序语句按其出现的先后顺序执行。使用流程控制语句可以按需要控制语句的执行次序和执行分支。执行。使用流程控制语句可以按需要控制语句的执行次序和执行分支。BEGINEND语句用于将多个语句用于将多个Transact-SQL语句定义成一个语句块。语句定义成一个语句块。语句块可以在程序中视为一个单元处理。语句块可以在程序中视为一个单元处
6、理。BEGINEND语句的语法如语句的语法如下:下:BEGIN sql语句语句|语句块语句块 END 其中,其中,sql语句为一条语句为一条Transact-SQL语句;语句块为用语句;语句块为用BEGIN和和END定义的语句块。可以看出,在一个语句块中可以包含另一个语句块。定义的语句块。可以看出,在一个语句块中可以包含另一个语句块。IFELSE语句的语法如下:语句的语法如下:IF 布尔表达式布尔表达式 sql语句语句1|语句块语句块1 ELSE sql语句语句2|语句块语句块2 n 布尔表达式布尔表达式:返回返回TRUE或或FALSE的表达式;的表达式;n sql语句语句:一条一条Trans
7、act-SQL语句;语句;n 语句块语句块:用用BEGIN和和END定义的语句组。定义的语句组。功能功能:当布尔表达式的值为当布尔表达式的值为TRUE时,执行时,执行sql语句语句1或语句块或语句块1;当布尔;当布尔表达式的值为表达式的值为FALSE时,执行时,执行sql语句语句2或语句块或语句块2。如果省略。如果省略ELSE部分,部分,则表示当布尔表达式的值为则表示当布尔表达式的值为FALSE时不执行任何操作。时不执行任何操作。【例例】设有一个设有一个“学生信息学生信息”数据库,数据库中有一个数据库,数据库中有一个“Student”表,该表表,该表包含包含StuID、StuName、StuB
8、irthDate等列。要给本月出生的学生举办庆祝生等列。要给本月出生的学生举办庆祝生日会,每月日会,每月1日选出要过生日的学生名单。日选出要过生日的学生名单。解决方案:解决方案:DECLARE Today int SET Today=DAY(GETDATE()IF(Today=1)BEGIN SELECT StuID,StuName FROM Student WHERE MONTH(StuBirthDate)=MONTH(GETDATE()END格式格式:WHILE 布尔表达式布尔表达式 sql语句语句|语句块语句块 功能:功能:从从WHILE语句开始,计算布尔表达式的值,当布尔表达式的值语句
9、开始,计算布尔表达式的值,当布尔表达式的值为为TRUE时,执行时,执行循环体循环体,然后返回,然后返回WHILE语句,再计算布尔表达式语句,再计算布尔表达式的值,如果仍为的值,如果仍为TRUE,则再,则再执行执行循环体循环体,直到某次布尔表达式,直到某次布尔表达式的值为的值为FALSE时,则不执行时,则不执行循环体循环体,而直接执行,而直接执行WHILE循环之后的其循环之后的其他语句。他语句。【例例】对对1到到100之间的数求和。之间的数求和。DECLARE i int,sum intSET i=1SET sum=0WHILE i=100 BEGIN SET sum=sum+i SET i=i
10、+1 ENDPRINT 1 到到100之间数的和为之间数的和为+Convert(char(10),sum)注释用于对代码行或代码段进行说明,或暂时禁用某些代码行。注释用于对代码行或代码段进行说明,或暂时禁用某些代码行。注注释语句不被编译器编译。释语句不被编译器编译。注释是程序代码中不执行的文本字符串。使注释是程序代码中不执行的文本字符串。使用注释对代码进行说明,可以使程序代码更易于理解和维护。注释通用注释对代码进行说明,可以使程序代码更易于理解和维护。注释通常用于说明代码的功能,描述复杂计算或解释编程方法,记录程序名常用于说明代码的功能,描述复杂计算或解释编程方法,记录程序名称、作者姓名、主要
11、代码更改的日期等。称、作者姓名、主要代码更改的日期等。向代码中添加注释时,需要用一定的字符进行标识。向代码中添加注释时,需要用一定的字符进行标识。SQL Server支持两种类型的注释字符。支持两种类型的注释字符。(1)-:这种注释字符可与要执行的代码处在同一行,也可另起一行。这种注释字符可与要执行的代码处在同一行,也可另起一行。从双连字符开始到行尾均表示注释。对于多行注释,必须在每个注从双连字符开始到行尾均表示注释。对于多行注释,必须在每个注释行的开始使用双连字符。释行的开始使用双连字符。【例例】使用双连字符给程序添加注释。使用双连字符给程序添加注释。-从从Student表中选择所有的行和列
12、表中选择所有的行和列SELECT*FROM StudentORDER BY StuID ASC -按按StuID列的升序排序列的升序排序(2)/*.*/:可与代码处在同一行,也可另起一行,甚至用在可执行代可与代码处在同一行,也可另起一行,甚至用在可执行代码内。从码内。从/*到到*/之间的全部内容均为注释部分。对于多行注释,必须使之间的全部内容均为注释部分。对于多行注释,必须使用用/*开始注释,使用开始注释,使用*/结束注释。注释行上不应出现其它注释字符。结束注释。注释行上不应出现其它注释字符。【例例】使用使用/*.*/给程序添加注释。给程序添加注释。/*从从Student表中选择所有的行和列表中选择所有的行和列*/SELECT*FROM StudentORDER BY StuID ASC /*按按StuID列的升序排序列的升序排序*/声明两个变量声明两个变量StuID和和CourseID,分别赋值为,分别赋值为A00001和和1。查。查询询SC表中对应的成绩,并将成绩放入变量表中对应的成绩,并将成绩放入变量Score中保存,最后打印该中保存,最后打印该成绩的值。成绩的值。