zoukankan      html  css  js  c++  java
  • 存储过程、触发器

    存储过程:就像函数一样的
    会保存在数据库中--》可编程性--》存储过程


    创建存储过程: 保存在数据库表,可编程性,存储过程
    create proc jiafa

    --需要的参数
    @a int,
    @b int
    as
    --存储过程内容
    declare @c int;
    set @c =@a + @b; 
    return @c;
    go


    相当于一个函数
    public int 函数名 (变量1,变量2)
    {
    函数语句
    return int c
    }

    存储之后可以直接调用,
    执行存储过程
    exec 存储名

    有返回值时
    declare @f int;
    exec @f= jiafa 3,5;
    print @f;


    --例:在CAR表中查询对应种类的车辆数目
    --存储过程
    creat proc ChaXun
    @n varchar(20)
    as
    declare @num int 
    select @num=coount(*) from car where name like '%'+@n+'%'
    go

    --调用方法
    declare @m int
    exec @m=ChaXun '奥迪'
    print @m

    触发器:
    是一个特殊的存储过程;
    通过增删改查的动作来触发执行,没有参数,没有返回值;
    存储位置在要执行的表的下拉列表中

    不去触发不执行,满足条件之后执行,相当于HTML中的事件

    create trigger 触发器名称

    Insert_Student --命名规范 动作_要执行的表名 为了以后更容易的了解触发器要使用的情况

    on Student --针对于那张表
    for insert --针对于那个动作来触发

    --onclick= "show()"
    as
    触发器要执行的代码 

    go

    1、for的意思是在动作执行之后触发
    2、instead of delete 的意思是删除之前的引发,可以理解为替代,写了这个之后写的性代码就没有用了,就被触发器的代码覆盖了

    删除存在外键的表的内容时,需要先删除外键连接的表的内容
    create trigger Delete_info
    on inf0
    instead of delete
    as
    declare @c varchar(20)
    select @c =Code from deleted

    delete from work where infocode=@c
    delete from family where infocode=@c
    delete from info where code=@c

    go


    instead of的使用比for的频繁

    面试过程中问的比较多,但实际工作是用的比较少

  • 相关阅读:
    Day 50
    Spring Boot logging 配置及相关属性
    spring boot的项目名称问题
    spring boot的项目结构问题
    @RestController无法自动注入的问题
    mysql的模糊查询
    写点什么来为自己的过去和未来画个分隔符
    python学习随笔day2
    python学习随笔day1
    linux文件上传和下载
  • 原文地址:https://www.cnblogs.com/kun-boke/p/5749933.html
Copyright © 2011-2022 走看看