`

触发器(3)

阅读更多

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

  *  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)"工具"/"安全"/"撤消数据库密码"

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics