- 掌握如何定义变量并赋值
- 掌握如何输出显示数据
- 掌握if、while、case逻辑控制语句
- 理解sql中批处理的概念
变量分为局部变量和全局变量
局部变量用@作为前缀,要先声明后赋值
全局变量用@@作为前缀,只能读取,不能修改全局变量的值
声明局部变量语法:
declare @变量名 数据类型 --/dɪˈkleə(r)/
declare @name varchar(8)
declare @seat int
赋值语法:
set @变量名 = 值
或
select @变量名 = 值
set @ name = '张三'
select @name = stuName FROM stuInfo where stuNo = 's22222'
--必须确保筛选出的记录只有1条
--编写T-SQL查找李文才的左右同桌
select @seat = stuSeat from stuInfo
where stuName = '李文才'
全局变量
@@error 最后一个T-SQL错误的错误号
@@identity 最后一次插入的标识值
@@language 当前使用的语言
@@max_connections 可以创建的同时连接的最大数目
@@rowcont 受上一个SQL语句影响的行数
@@servername 本地服务器名称
@@transcount 当前连接打开的事务数 --sql server 2005后无效
@@version sql server的版本信息
逻辑控制语句
if else 分支语句
- 同c语言一样else 是可选部分,if - else 也可嵌套使用
if(条件)
begin
语句1
语句2
……
end
else
begin
语句1
语句2
……
end
if - else示例:
学生成绩表:stuScore
examNO stuNo writtenExam labExam
------- ------ ----------- -----------
S271811 s25303 80 58
S271813 s25302 50 90
S271816 s25301 77 82
S271818 s25328 45 65
问题:
统计并显示本班笔试平均分,如果平均分在70以上,显示“成绩优秀”,
并显示前三名学员的考试信息;如果平均分在70以下,显示“成绩较差”,
并显示后三名学员的考试信息。
declare @writtenAvg float
select @writtenAvg = avg(writtenExam)from stuscore
print '本班笔试平均分:' + convert(varchar(5),@writtenavg)
if (@writtenAvg>70)
begin
print '本班笔试成绩优秀,前三名的成绩为'
select top 3 * from stuScore order by writtenExam desc
end
else
begin
print '本班笔试成绩较差,后三名的成绩为'
select top 3 * from stuScore order by writtenExam
end
go
本班笔试成绩较差,后三名的成绩为
examNO stuNo writtenExam labExam
------- ------ ----------- -----------
S271818 s25328 45 65
S271813 s25302 50 90
S271816 s25301 77 82
逻辑控制语句
Begin
语句1
语句2
……
break
end
declare @sum int
set @sum = 0
set @num =1
while ( @num <= 100)
begin
set @sum += @num
set @num = @num + 1
end
print @sum
when 条件1 then 结果1
when 条件2 then 结果2
eles 其他结果
end
when 值1 then 结果1
when 值2 then 结果2
……
else 其他结果
end
1 use school 2 go 3 if exists(select 1 from sysobjects where name = 'testscore') 4 drop table testscore 5 create table testScore ( 6 examNo char(7), 7 stuNo char(6), 8 writtenExam int, 9 labExam int 10 ) 11 go 12 insert testScore values( 13 'S271813', 14 's25302', 15 66, 16 90 17 ) 18 19 insert testScore values( 20 'S271816', 21 's25301', 22 93, 23 82 24 ) 25 26 insert testScore values( 27 'S271818', 28 's25328', 29 61, 30 65 31 ) 32 33 insert testScore values( 34 'S271811', 35 's25303', 36 96, 37 58 38 ) 39 go 40 41 SELECT * FROM testScore 42 GO 43 44 DECLARE @labAvg int 45 select @labAvg = AVG(labexam)from testScore 46 while @labAvg < 85 47 begin 48 update testScore set labExam = 49 case 50 when labExam >= 90 then labExam+0 51 when labExam >= 80 then labExam+1 52 when labExam >= 70 then labExam+2 53 when labExam >= 60 then labExam+3 54 else labExam+5 55 end 56 select @labAvg = AVG(labexam)from testScore 57 58 end 59 go 60 61 SELECT * FROM testScore
浙公网安备 33010602011771号