• 第五章 存储过程&触发器


    1、前言

    2、存储过程和触发器
    -》存储过程
    ·理解:是一组SQL命令集合,经过预编译存放在系统中;就像java程序里的方法,可以重复的被调用;
    在日常的数据库操作中,会有大量的T-SQL批处理、游标,如果每次都要去重写或者打开脚本来执行会相当麻烦,
    数据库可以将我们编写的T-SQL批处理保存在一个处理过程中。
    --创建
    ·语法格式:create {proc | procedure} 存储名 [ @参数名 数据类型 [,···n] ]
    as
    [begin]
    sql语句[块]
    [end]
    ·例:无参数:create procedure stduent_avg
    as
    select 学号,avg(成绩) as '平均分' from 选课表
    group by 学号
    go

    有参数:create procedure GetStu @number char(7)
    as
    select * from 学生表 where 学号=@ number
    go
    输出参数: create procedure Pname @p_n varchar(20),@avgage int output
    as /*output表明该选项的值可以返回给调用此过程的应用程序*/
    select @ avgage=avg(单价) from 商品 where 商品名称=@ p_n
    go
    --执行
    ·语法格式:execute {proc | procedure} 存储名 [ @参数名 数据类型 [,···n] ]
    ·例:无参数:execute stduent_avg
    有参数:execute GetStu '0100111'
    输出参数:declare @ avgage int
    execute Pname '冰箱',@ avgage output
    print '冰箱的平均价格:' + str(@ avgage)
    --查看
    ·语法格式: sp_help 存储过程名 /*表的形式*/
    sp_helptext 存储过程名 /*文本打印的形式*/
    ·例:
    --修改: alter procedure 存储过程名 [参数]
    as
    sql语句[块]
    go
    --删除: drop procedure 存储过程名

    -》触发器
    ·解释:一种特殊的存储过程;
    它不是由用户主动发起调用的,而是当发生某一事件(表发生新增、修改、删除操作时)而触发,由系统自动调用。
    ·作用:
    ·分类:DML触发器:发生数据操作语言事件时自动执行存储过程
    DDL触发器:响应DDL语句触发
    ·语法格式:create trigger 触发器名
    on {表名 | 视图}
    [with encryption] /*加密syscomments表中包含create trigger语句条目*/
    {for | after | instead of} /*after:所有操作成功执行后才激活;instead of:指执行触发器而不执行触发语句*/
    {[insert][delete][update]} /*执行哪个数据修改语句激活触发器的关键字*/
    [not for replication] /*复制进程更改触发器所涉及的表时,不应执行该触发器*/
    as sql语句[块]
    ·例1:为学生表创建一个DML触发器,在插入和修改数据时,都会自动显示所有学生的信息
    create trigger print_table on 学生表
    for insert,update
    as select * from 学生表
    ·例2:使用DDL触发器limited来防止数据库中的任一表被修改和删除
    use 教学库
    go
    create trigger limited on database
    for drop_table,alter_table
    as
    print '不允许您执行对表的修改或删除操作'
    rollback
    ·例3:创建一个delete类型的触发器,删除数据时,显示删除学生个数
    create trigger del_table on 学生表
    for delete
    as
    declare @count vachar(50)
    select @count = str(@@rowcount) + '个学生被删除'
    select @count
    return
    ·查看:sp_help 触发器名
    sp_helptext 触发器名
    sp_helptrigger 表名 /*查看某个表上的触发器*/
    ·修改: alter trigger 触发器名
    on {表名 | 视图}
    [with encryption] /*加密syscomments表中包含create trigger语句条目*/
    {for | after | instead of} /*after:所有操作成功执行后才激活;instead of:指执行触发器而不执行触发语句*/
    {[insert][delete][update]} /*执行哪个数据修改语句激活触发器的关键字*/
    [not for replication] /*复制进程更改触发器所涉及的表时,不应执行该触发器*/
    as sql语句[块]
    ·禁止、启用和删除
    --启用、禁止:alter table 表名
    [enable | disable] trigger [all | 触发其名[,···n]]
    /*启用或禁止所用或某个触发器*/
    --删除:drop trigger 触发器名

    不知跬步,无以至千里;不积小流,无以成江海。菜鸟的梦想是雄鹰。
  • 相关阅读:
    数据结构课后
    idea 使用java 链接sqlservice 2008
    超链接 a href 提交表单通过post方式
    课程主页之课程接口
    课程主页之课程表数据
    课程表分析
    课程前端简单页面
    前台的登录注册
    ORM常用字段及参数与查询 -刘
    Celery配置与使用
  • 原文地址:https://www.cnblogs.com/ysq2018China/p/9147720.html
Copyright © 2020-2023  润新知