变量是可以储存数据值的对象,可以使用局部变量向SQL语句传递数据
局部变量的名称必须以标记@作为前缀。 declare @variablea_name DataType
其中,variable_name为局部变量的名称,DataType为数据类型 变量的赋值有两个方法:SET或SELECT
set @variable_name =value 或 select @variable_name=value
!!! select 和 set 区别 在什么时候赋值使用select。
全局变量:SQLServer中的所有全局变量都使用两个@@符号作为前缀。 程序员不可以手动改变或添加公共变量 @@error 最后一个T-SQL错误的错误号 @@identty 最后一次插入的标识值 @@rowcount 可以常见的,同时连接的最大数目 @@servername 本地服务器的名称 @@version SQL Server的版本信息 Print 局部变量或字符串 Select 局部变量 AS 自定义列名
数据类型的转换 CAST()和CONVERT()函数 与C#语言相似,在T-SQL语言中,数据类型的转换也分为隐式转换和显示转换 Cast(表达式 AS 数据类型) Convert(数据类型【(长度)】,表达式【,样式】) 逻辑控制语句 Begin-End语句 (Begin-End语句将多个T-SQL语句定义成一个语句块,把每个语句块视为一个单元) Begin 语句或语句块 End if-else条件语句 if(条件) 语句或语句块1 else 语句或语句块2 (如果有多条语句,则需要与Begin-End结合使用,表示一个完整的语句块) if(条件) Begin 语句1 语句2 ....... end else ...... 问题2: ( 统计并显示2013-08-09 的oop考试平均分 如果平均分在70分以上,显示“考试成绩优秀”,并显示前三名学生的考试信息 如果在以下,显示“考试成绩较差”,并显示后三名学生的考试信息 ) declare @subid int select @subid=SubjectId from Subject where subjectname='oop' declare @avg int --定义一个变量,保存平均分 --如何求2013-08-09 oop 平均分 select @avg=AVG(StudentResult) from result --判定@avg和的关系 where examdate>='2013-08-09' and examdate<'2013-08-10' and subjectid=@subid if(@avg>=70) begin
print '成绩优秀' --01.打印成绩优秀 select top 3 studentno,studentresult from result where examdate>='2013-08-09' and examdate<'2013-08-10' and subjectid=@subid --02.显示前3名学生成绩信息 order by studentresult desc end else begin print '良好' --打印成绩良好 select top 3 studentno,studentresult from result where examdate>='2013-08-09' and examdate<'2013-08-10' --显示后3名学生成绩 and subjectid=@subid order by studentresult asc End While循环语句 (在SQL 中,只有while一种循环,没有do-while和for循环) while(条件) begin 语句或语句块 【break|continue】 end
问题3: 求1到100之间的偶数和 declare @sum int set @sum=0 declare @num int set @num=1 while(@num<=100) begin if(@num%2=0) begin set @sum+=@num end set @num+=1 end print @sum 问题4: (检查学生“oop”课最近一次考试是否有不及格(60分及格)的学生,如有,每人加2分,高于95分的学生不再加分,直至所有学生这次考试成绩均及格) declare @subid int select @subid=subjectid from subject where subjectname='oop' declare @mydate datetime select @mydate=max(examdate) from result where subjectid=@subid declare @num int select @num=count(1) from result where subjectid=@subid and examdate=@mydate and studentresult<70 while(@num>0) begin update result set studentresult+=2 where studentresult<95 and subjectid=@subid and examdate=@mydate select @num=count(1) from result where subjectid=@subid and examdate=@mydate and studentresult<70 print @num end select * from result order by subjectid,examdate
case多分支语句 case-end语句计算一组条件表达式,并返回其中一个符合条件的结果 case when 条件一 then 结果一 when 条件二 then 结果二 when 条件三 then 结果三 ...... end 问题五:(采用美国的A到E五级打分制来显示学生'oop'课程最近一次考试成绩) ( A级: 90分以上 B级:80-分 C级: 70-分 D级:60-分 E级:60分以下 ) declare @subid int declare @maxdate datetime select @subid=subjectid from subject where subjectname='oop' select @maxdate=max(examdate) from result where subjectid=@subid select studentname,等级= case when studentresult>=90 then 'A' when studentresult>=80 then 'B' when studentresult>=70 then 'C' when studentresult>=60 then 'D' else 'E' end from student,result where student.StudentNo=result.StudentNo and subjectid=@subid and examdate=@maxdate