美文网首页
09-19:存储过程

09-19:存储过程

作者: 神坛下的我 | 来源:发表于2018-09-19 16:44 被阅读0次

触发器笔记(续)

  • 触发器是一类特殊的存储过程
  • DDL触发器(insert,delete,update)
  1. 后触发器 for,DDL触发器是建立在表上的,所有语法on table for insert,
    delete,update操作会相应激活触发器,同一个触发器针对多种动作都会触发,
    通过查询inserted和deleted幻表中是否存在数据来判断是哪种操作。
    针对dml操作产生数据变化,额外做记录,使用后触发器
  2. 替代触发器(前触发器)instead of
    将dml替代掉,针对dml操作产生数据变化,需要判断和验证通过才执行的使用
    替代触发器。
create trigger trg_teacher_add
on teacher 
instead of insert 
as 
begin 
    declare @countno int 
    select @countno = count(*) from student 
    print convert(char(2),@countno)+'位教师'
    if @countno <= 11 
    begin
     insert into teacher select * from inserted
    end
    else
    begin
     print '无法添加新教师,已经满员'
    end
end
... 
  • 新版的dml触发器是关闭秦涛,如一张表有替代插入触发器,数据通过验证,
    仍然需要将数据插入到本表中,如果打开了触发器嵌套,则形成 自己插入自
    己激活触发器又插入自己的死循环,解决方案为,插入表,触发器内部插入该
    表的视图,或者插入视图,触发器建立在视图上,在触发器中插入本表。

  • DCL触发器(create,drop,alter)
  1. 星期三不准删除表
create trigger trg_drop_table
on datebase 
for drop_table
as
begin
 declare @day int
 select @day = datepart(dw,getdate())
 if(@day = 4) 
 begin
  raiserror('星期三不准删除表',16,20)
  rollback transaction
 end
end
  • 查看表编号select object_id('student')

存储过程

  • 是数据库预编译的对象,能够提高数据查询的效率。
  • 存储过程好处:
  1. 提高查询效率
  2. 减少网络传输
  3. 可以灵活的返回多种数据
  • 存储过程用于需要经过逻辑计算之后执行的dml,dql甚至ddl批量操作
  • 车次与票务表
create table train
(
 tid char(6) primary key,
 startCity varchar(20), 
 endCity varchar(20),
 begintime datetime,
 siteno  int,
 rowno int,
 coachno int
)

create table  ticket
(
 tkno char(12) primary key,
 issell int
)

  • 增加一个车次,填写了车次相关信息后,自动添加票务信息
create procedure prc_addTrain @tid char(6),
                  @startCity varchar(20), 
                  @endCity varchar(20),
                  @begintime datetime,
                  @siteno  int, --每排的座位数
                  @rowno int, --每节车厢的排数
                  @coachno int, --车厢
                  @outno int output
as
begin
 insert into train values(@tid,@startCity,@endCity,@begintime,@siteno,@rowno,@coachno)
 declare @i int = 0,@j int = 0,@k int = 0,@coachnot char(2),
    @rownot char(2)
 while (@i < @coachno) --循环车厢
  begin
   set @i = @i + 1
   while(@j < @rowno) --循环每节车厢的行
    begin
     set @j = @j+1
     while(@k < @siteno) -- 循环每一行的座位
      begin
       set @k = @k+1
    if(@i < 10)
    begin
     set @coachnot = '0' + convert(char(2),@i)
    end
    else
    begin
     set @coachnot = convert(char(2),@i)
    end

    if(@j < 10)
    begin
     set @rownot = '0' + convert(char(2),@j)
    end
    else
    begin
     set @rownot = convert(char(2),@j)
    end

        -- print @coachnot+@rownot+
        -- convert(char(1),char(@k + 64))
    insert into ticket values(@tid+'-'+@coachnot+@rownot+
        convert(char(1),char(@k + 64)),0)
      end
      set @k = 0
    end
      set @j = 0

  end
  set @outno = @siteno * @rowno * @coachno
end

-- 输出参数使用:存储过程定义的时候,在输入参数之后,写输出参数
带out关键值,并在存储过程中给out参数赋值,调用的时候声明相应变量
来接收输出参数。
declare @outno int
exec prc_addTrain 'T05031','成都','广安','2011-12-23',5,10,2,@outno  output
print '本次增加车票数量为'+convert(varchar(10),@outno)

-- 得到字符的ASCII值:select ASCII('a')
  • 每位同学都要加分,1.60分以下加20%;2.60-80加18%但不超过90分;3.80分
    以上加15%但不超过100分,显示加分后的成绩

相关文章

  • 09-19:存储过程

    触发器笔记(续) 触发器是一类特殊的存储过程 DDL触发器(insert,delete,update) 后触发器 ...

  • Mysql存储过程

    阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本” 创建存储过程 调用存储过程 存储过程...

  • MySQL批量添加数据

    创建存储过程 执行存储过程 删除存储过程

  • 17 存储过程

    过程: 函数: 过程是没有返回值的函数 存储过程: 存储过程语法 存储过程1--创建简单的存储过程 存储过程2--...

  • 存储过程

    详见存储过程详解 创建存储过程 使用存储过程 存储过程简介 什么是存储过程:存储过程可以说是一个记录集吧,它是由一...

  • 存储过程与函数

    存储过程与函数存储过程的定义存储过程的创建存储过程的操作自定义函数 存储过程与函数 存储过程的定义 运行效率高 降...

  • 存储过程

    ps 不能修改过程体,要修改过程体必须先删除存储过程,再重建 mysql变量的术语分类: 1.用户变量:以"@"开...

  • 存储过程

    存储过程 过程,可以简单理解为是一个函数。 函数和过程的区别:函数总是向调用者返回数据,而过程没有数据返回。 Or...

  • 存储过程

    存储过程(Stored Procedure)是一个可编程的函数,是为了完成特定功能的SQL语句集;创建的存储过程保...

  • 存储过程

    一.基础语法 说明 delimiter // 一般情况下MYSQL以;结尾表示确认输入并执行语句,但在存储过程中;...

网友评论

      本文标题:09-19:存储过程

      本文链接:https://www.haomeiwen.com/subject/yziinftx.html