一:本章目标
1:掌握如何定义变量并赋值
2:如何输出显示数据
3:数据类型转换 cast()和convert()函数
4:掌握逻辑控制语句:
顺序结构控制语句:begin-end语句
分支结构控制语句:if-else语句和case-end语句
循环结构控制语句:while语句
5:使用批处理指令完成多语句批量处理(GO指令)
二:变量
定义:变量是存储数据的容器
变量分为局部变量和全局变量
局部变量的使用是先申明再赋值。而全局变量由系统定义和维护,可以直接使用,但一般不自定义全局变量
1:局部变量:
局部变量的名称必须以标记@作为前缀
声明局部变量的语句如下:
declare @variable name(局部变量名称) DataType(数据类型)
局部变量赋值有两种方法:使用Set语句或Select语句
例子:
整型:
declare @num int set @num=10 print 'num的值是:'+convert(nvarchar(32),@num)
字符串类型:(char varchar nvarchar)
declare @name nvarchar(32) set @name='赵六' print @name
小数类型(float decimal numeric(18,0))
declare @number decimal(18,2) set @number=1.3 print @number
日期类型(datetime))
declare @mydate datetime set @mydate=GETDATE() print convert(nvarchar(32),@mydate,120)
2:全局变量
SqlServer中的所有全局变量都使用两个@符号作为前缀
常用的几个全局变量:
@@error(重点) | 上一条SQL错误号 |
@@identity | 最后一次插入的标识值 |
@@rowcount | 受上一个SQL语句影响的行数 |
@@serviceName | 该计算机上的SQL服务名称 |
@@Version | SQLServer的版本信息 |
注:程序员不能自己定义全局变量,不能给全局变量赋值
三:select语句和set语句区别
Set | Select | |
同时对多个变量赋值 | 不支持 | 支持 |
表达式返回多个值时 | 出错 | 将返回的最后一个值赋给变量 |
表达式未返回值时 | 变量将赋值为NULL | 变量保持原值 |
eg:
注:被赋值的变量的数据来源于数据表的时候,不要用set,选用select
Declare @stuName nvarchar(32) Select @stuName=studentname from student Where studentno=23
四:数据类型转换
cast()与convert()函数
基本语法:
cast(表达式 as 数据类型)
convert(数据类型[(长度)],表达式[,样式])
二者在本质上无任何区别 唯一不同之处是:在将日期时间类型的数据转换为字符串数据时,convert()函数可以通过第三个参数指定转换后字符数据的显示格式不同。
五:逻辑控制语句
1:顺序结构控制语句
begin
语句或语句块
end
类似于C#语言的“{}”表示语句块的开始和结束
2:If-else条件语句
金典案例:
统计并显示2013-08-09 的oop考试平均分
如果平均分在70以上,显示“考试成绩优秀”,并显示前三名学生的考试信息
如果在70分以下,显示“考试成绩较差”,并显示后三名学生的考试信息
3:while循环语句
注:在SQL 中,只有while一种循环,没有do-while和for循环
经典案例:
检查学生“oop”课最近一次考试是否有不及格(60分及格)的学生。
如有,每人加2分,高于95分的学生不再加分,直至所有学生这次考试成绩均及格
4:case多分支语句
case-end语句计算一组条件表达式,并返回其中一个符合条件的结果
基本语法:
case
when 条件1 then 结果1
when 条件2 then 结果2
[ else 其他结果]
end
经典案例:
ABCDE五级打分制显示学生oop课最近一次考试成绩(姓名和等级)
A级: 90分以上,B级:80-分,C级: 70-分,D级:60-分,E级:60分以下
五:批处理
GO指令:GO关键字标志着批处理的结束,它是一条或多条SQL语句的集合