欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

触发器(3)  

程序员文章站 2024-03-16 11:37:34
...

 *  回滚只能回滚到上一步操作。

  *  UPDATE,INSERT,DELELE 这些操作都将建立一个临时库(SQL 2000触发器只有DELETED,INSERTED)存储被操作过的数据。

 

/*触发器实例(3)*/

create trigger grade_update

 

on sc

 

for delete,insert,update

 

as 

declare @sname char(10)

declare @grade smallint

select @sname=sno,@grade=grade from sc where grade>100 or grade<0

if @grade<0

 begin

       update sc set grade=0 where sno=@sname

        print '成绩输入有误!'+@sname+'  成绩置为0'

 end

else if @grade>100

        begin 

               rollback tran

               print '成绩输入有误!'+@sname+'成绩输入无效'

        end

else

        begin

               print'成绩输入有效,已经更新!'

        end

 

 update sc  set grade=-12 where sno='95001' /*看效果*/

 update sc  set grade=120 where sno='95001'

 

/*触发器实例(3)*/

create trigger sexandage1_update

 

on student

 

for delete,insert,update

as 

declare @sssex char(2)

declare @ssage  smallint

select @sssex=ssex,@ssage=sage from student where ssex<>'男' or sage>=25

if @sssex<>'男'

   begin

         update student set ssex='男' where ssex=@sssex

         print '你输入的性别有误!性别'+@sssex+'性别置为男性别'

   end

 

else  if @ssage>=25

         begin

             

         update student set sage=24 where sage=@ssage

         print '你输入的年龄大于24岁!年龄'+@ssage+'年龄置为25岁!'

         end

insert into student ( sno,ssex, sage) values('95029','男',25) /*看效果*/

/*触发器实例(4)*/

create trigger samesno_update

 

on student

 

for delete,insert,update

as

declare @ssno char(5)

declare @num  smallint

select @ssno=sno from inserted where sno=@ssno 

select @num=count(sno) from student where sno=@ssno

 

if @num>=2

       begin 

       delete from student where sno=@ssno

       print 'shurucuo'

       end

 

DBA工作流程:建库-建表-建触发器(delete,insert)-建存储过程-录入数据

 

 

 

 

/*作业的操作*/

/*分离,附加,删除数据库的不同点*/

 

分离:右击已建的数据库选分离数据库

附加:右击数据库目录选附加数据库

 

备份:完全,差异,事物,完全和差异一般共用一个数据库,事物单独用一个数据库,查看备份情况:右击已建的备份作业选查看历史记录

 

还原:必须从设备中添加,数据库名不同用强制还原

 

游标:一个标志,一个游动的过程。

   1,向前游标 

   2,静态游标(可做删,改,查操作)(static)

   3,动态游标 (dynamic)

   4,关键值游标(动静结合)(keyset)

   

 格式:

    declare cur_stu cursor/*建立游标*/

        keyset

        for

        select * from student

    

        open cur_stu /*打开游标*/

       

        fetch next from cur_stu/*使用*/

        fetch prior from cur_stu

        fetch first from cur_stu

        fetch last  from cur_stu

        fetch last  absolute 3 from cur_stu

        fetch last   relative 3 from cur_stu

 

       /*注:absolute :绝对位置

             relative :相对于当前的位置*/

 

        格式: fetch [next/prior/first/last/absolute/relative]

              from 游标名

 

 

/*静态游标例子*/

declare cur_stus cursor

  static

  for

  select * from student

 

 open cur_stus

  delete from student where sno='95009'

  fetch next from cur_stu

  fetch prior from cur_stu

  fetch first from cur_stu

  fetch   absolute 3  from cur_stu

  fetch   relative 3 from cur_stu

 

/*随机抽取两条记录*/

declare stucursss cursor

keyset

for

select * from student

 

open stucursss

 

create proc ppppp

as

declare @ppppp smallint

set @ppppp=floor (rand()*5)-1

print 'first rand'

 

fetch absolute @ppppp from stucursss

set  @ppppp=floor (rand() *5)-1

print 'second rand'

fetch absolute @ppppp from stucursss

 

 

ppppp

 

 

 

ppppp /*调用pp过程*/

close stucur /*关闭游标*/

deallocate  游标名 /*删除游标*/

 

 

 

设置access数据库密码:"工具"/"安全"/"设置数据库密码"

撤消access数据库密码:

(1)"文件"/"打开"单击已经建立的*.mdb数据库文件,在右下角"打开"中选择以独占方式打开。

(2)"工具"/"安全"/"撤消数据库密码"