fromResult
whereStudentResult<60 groupbyStudentNo go
updatePunishsetAdvice= ( ) go
selectStudentNo,FailCount,Advice fromPunish
case end
whenFailCount>3 then'开除学籍' whenFailCount>2 then'肄业处理' else'给予警告'
存储过程
1
--? 创建存储过程,查询Java Logic最近一次考试平均分以及未通过考试的学员名单
ifexists(select*fromsysobjectswherename='usp_Result_AvgFail_Output') dropprocusp_Result_AvgFail_Output go
createprocusp_Result_AvgFail_Output as ')
--print @subNo declare@subNoint
set@subNo=(selectSubjectIdfromSubjectwhereSubjectName='深入.NET平台和C#编程@avgScorefloatoutput, @failCountintoutput
go
declare@avgfloat,@failCountint
execusp_Result_AvgFail_Output@avgoutput,@failCountoutput
print'深入.NET平台和C#编程平均值为:'+cast(@avgasvarchar(8)) print'不及格人数为:'+convert(varchar(8),@failCount)
select@failCount=COUNT(*) fromStudent
whereStudentNoin(selectStudentNofromResultwhereSubjectResult<60) select@avgScore=avg(SubjectResult) fromResult
whereSubjectId=@subNo and
ExamDate=(selectMAX(ExamDate)fromResultwhereSubjectId=@subNo)
触发器
USE[ClassDB] GO
/****** Object: Trigger [dbo].[trig_classinfo_insert] Script Date: 2016/8/25 9:11:16 ******/ SETANSI_NULLSON GO
SETQUOTED_IDENTIFIERON GO
ALTERtrigger[dbo].[trig_classinfo_insert] on[dbo].[classinfo] afterinsert as
updateclasetclanum+=1
wherecid=(selectcidfrominserted)
createtriggertrig_classinfo_delete onclassinfo afterdelete as
select*fromdeleted updateclasetclanum-=1
wherecid=(selectclassidfromdeleted)
deletefromclassinfowherestuid='0004'
触发器的作用是什么?
在 SQL Server里,可以用两种方法来保证数据的有效性和完整性:约束(CHECK)和触发器(TRIGGER)。 触发器是一种特殊类型的存储过程,也是提前编译好的SQL 语句的集合。当对数据表实施插入、修改、删除操作时,触发器会被自动执行,以检查数据的处理是否符合数据的有效性和完整性。
事务(Transaction)
概念:
作为单个逻辑工作单元的一系列操作,多个操作作为一个整体向系统提交,要么都执行,要么都不执行
特性:
事务必须具备以下四个属性,简称ACID属性: 1. 原子性(Atomicity)
a) 事务是一个完整的操作,事务的各步骤操作是不可分割的(原子性),要么都执行,要么
都不执行
2. 一致性(Consistency)
a) 当事务完成时,数据必须处于一致状态
3. 隔离性(Isolation)
a) 当事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务 4. 永久性(Durability)
a) 事务完成后,它对数据库的的修改被永久保持
使用TSQL语句管理事务
开始事务:begin transaction 提交事务:commit transaction
回滚(撤销)事务:rollback transaction
--创建表
ifexists(select*fromsysobjectswherename='bank') droptablebank CREATETABLEbank ( )
insertintobank(bankCard,customerName,balance) values('5412548796541236547','张三',1000),
begintransaction--开始事务
declare@errotSumint--声明变量:统计错误
('5412548796541564212','李四',1)
bankCardchar(19)primarykeycheck (len(bankCard)=19), customerNamevarchar(10)notnull,
--check只是在写入数据时才约束,但是插入的时候可以为空 balancemoneycheck(balance>=1)notnull
set@errotSum=0 ---初始化错误次数
updatebanksetbalance-=800 wherebankCard='5412548796541236547' set@errotSum+=@@ERROR
updatebanksetbalance+=800 wherebankCard='5412548796541564212' set@errotSum+=@@ERROR
if@errotSum>0
select*frombank
begin end begin end
print'转账成功' committransaction print'转账失败' rollbacktransaction
else
分页
Select..not in..
ifexists(select*fromsysobjectswherename='usp_Student_page') dropprocusp_Student_page go
createprocusp_Student_page as
declare@totalint select@total=count(*) fromStudent
if(@total<(@pageSize*@pageCurrent))
begin
if(@total%@pageSize<>0)
set@pageTotal=@total%@pageSize+1
@pageTotalintoutput, @pageCurrentint, @pageSizeint