(一)触发器
use jwt
go
if exists (select *from sysobjects where name='S_I_U'and type='TR')
drop trigger S_I_U
go
create trigger S_I_U
on S
for insert,update
as
print '对S表进行了数据的插入和修改'
go
use jwt
go
update S
set BIRTHDATE='1996-12-24'
where SN0='S6'
go
use jwt
go
if exists (select *from sysobjects where name='DEL_COUNT'and type='TR')
drop trigger DEL_COUNT
go
create trigger DEL_COUNT
on SC
for DELETE
as
declare @count varchar(50)
select @count='SC表中'+STR(@@ROWCOUNT,3)+'个元组被删除'
print @count
return
go
use jwt
go
delete from SC where SNO in(
select SN0 from S where COLLEGE='C')
use jwt
go
if exists (select *from sysobjects where name='DDL_TableTrigger'and type='TR')
drop trigger DDL_TableTrigger
go
create trigger DDL_TableTrigger
on database
for drop_table,alter_table
as print '对不起,不允许对数据表进行删除或修改操作,请联系DBA.'
rollback
go
use jwt
go
drop table SC
use jwt
if exists (select *from sysobjects where name='dd1_trig_datebase'and type='TR')
drop trigger dd1_trig_datebase on all server;
go
create trigger dd1_trig_datebase
on all server
for create_database
as print '对不起,不允许创建数据库'
rollback
create database test
go
use jwt
go
if exists (select *from sysobjects where name='TR_GRADE_CHECK'and type='TR')
drop trigger TR_GRADE_CHECK
go
create trigger TR_GRADE_CHECK
on SC
AFTER insert,update
as
declare @SC_GRADE nchar(10)
select @SC_GRADE=SC.GRADE
from SC
if (@SC_GRADE not between 0 and 100)
print '你插入的成绩不在0-100之间'
return
go
(二)事务
//一定记得先建A,B表
use jwt
go
declare @money money, @err1 int ,@err2 int
set @money=300
begin transaction
update A
set amount=amount-1
set @err1=@@error
save transaction transfer
update A
set amount=amount-@money
set @err2=@@error
update B
set amount=amount+@money
set @err2=@err2+@@error
if @err1<>0
begin
rollback transaction
print '操作失败,手续费未扣除,数据回到初始状态'
end
else
begin
if @err2<>0
begin
rollback transaction transfer
print '转载失败,但手续费已扣除'
end
else
begin
commit transaction
print '转账成功,手续费也扣除'
end
end
select * from A
select * from B