全局变量的总结

本文介绍了SQL Server中的全局变量,包括错误号、标识值等,并通过实例展示了如何使用这些变量进行错误处理和数据操作。此外,还提供了一些实用的SQL编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  很开心我们今天学习了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 

   when shengfu='' then 1 

   else 0 

end) as 胜,sum

(

  case

    when shengfu='' then 1 

    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

 

转载于:https://www.cnblogs.com/LJN520/p/5250643.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值