很开心我们今天学习了SQL编程的全局变量,那么什么是全局变量呢?全局变量的作用是什么呢?全局变量都有哪些呢?语法又是什么呢?下面让我们简单的来了解一下SQL编程的全局变量。。在SQL-Server中的所有全局变量都使用两个@符号作为前缀,较为重要的变量为如下五个- - -
程序员不会自己定义全局变量,一般使用系统现有的全局变量。
@@ERROR 含义:(非常重要的!!原老师说的嚄!!)获取最后一个T-SQL错误的错误号一般用@@Error捕获约束错误,而不是SQL语句本身的语法错 误。当我们在面对一些复杂的业务流程的时候,一条单个的SQL语句已经无法满足需要,所以我们要将一堆SQL语句封装成一个存储过程。该 存储过程中,可能有多个增删改操作。如
果其中某一个操作由于违反约束,造成执行失败,那么我们就需要将存储过程中所有的全部操作一次性回滚,这个时候@@Error就起到了至 关重要的作用。每执行一个操作就获取一下@@Error的值,到最后,看@@Error的值是否大于,如果大于,就证明其中某一个环节(操作)出 现错误,要整体回滚。!!!
@@IDENTITY 含义:最后一次插入的标识值
select * from grade
insert into grade values('S2223')
select @@identity
@@ROWCOUNT 含义:受上一个SQL语句影响的行数 select @@SERVERNAME
@@SERVERNAME 含义:本地服务器的名称
@@VERSION 含义:SQL Server的版权信息
update student set gender='QWER'
where studentno=23
经验:Microsoft提供的SQL Server帮助文档建议程序员使用SET语句为局部变量赋值,其原因是SET语句执行没有结果集,占用资源少。因此给一个变量赋值时,使用SET语句比使用SELECT语句的效率要高。
然而局部变量的赋值有两种方法,set语句和select语句
set @ Variable_name = value select @Variable_name - value
一道SQL语句面试题,关于group by
表内容:
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负
如果要生成下列结果, 该如何写sql语句?
日期 胜 负
2005-05-09 2 2
2005-05-10 1 2
------------------------------------------
*/
create table tmp(rq varchar(10),shengfu nchar(1))
select * from tmp
insert into tmp values('2005-05-09','胜')
insert into tmp values('2005-05-09','胜')
insert into tmp values('2005-05-09','负')
insert into tmp values('2005-05-09','负')
insert into tmp values('2005-05-10','胜')
insert into tmp values('2005-05-10','负')
insert into tmp values('2005-05-10','负')
select * from tmp
select rq as 日期,sum
(case
胜'
else 0
end) as 胜,sum
(
case
负'
else 0
end
) as 负
from tmp
group by rq
经典while循环加分题目
检查学生“oop”课最近一次考试是否有不及格(60分及格)的学生。
如有,每人加2分,高于95分的学生不再加分,直至所有学生这次考试成绩均及格
科目编号
select * from result
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
每个人+2分,但是分以上不加分
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