T-SQL编程

目标
  • 掌握如何定义变量并赋值
  • 掌握如何输出显示数据
  • 掌握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查找李文才的左右同桌

 declare @seat int
 
 select @seat =  stuSeat from stuInfo
   where stuName = '李文才'
 
select stuname from stuInfo
  where stuSeat in( @seat + 1,@seat - 1)

全局变量 

@@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

 

本班笔试平均分:63
本班笔试成绩较差,后三名的成绩为
examNO  stuNo  writtenExam labExam
------- ------ ----------- -----------
S271818 s25328 45          65
S271813 s25302 50          90
S271816 s25301 77          82
(3 行受影响)
逻辑控制语句
while循环语句
while 条件
  Begin
    语句1
    语句2
    ……
    break
  end
备: sql中没有for 和do - while 循环语句,只有while 一种
  continue 和 break 同C语言中含义一样
 
示例:统计 1 加到 100 的和
declare @num int
declare @sum int
set @sum = 0
set @num =1
while ( @num <= 100)
 begin
  set @sum += @num
  set @num = @num + 1
 end
print @sum
备: SQL中无自增运算符 @num++ 是错的
逻辑控制语句
case - end 多分支语句1
case 
  when 条件1 then 结果1
  when 条件2 then 结果2
  ……
eles 其他结果
end
————————————————————
case - end 多分支语句2
 
case 表达式
  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
View Code

 

 

你可能感兴趣的:(T-SQL编程)