• SQL Server基础 存储过程、触发器、级联删除


    一、存储过程

    1、存储过程:存储过程是一组编译在单个执行计划中的T-SQL语句,就像函数一样的会保存在数据库中(可编程性)

    2、存储过程的优点:

      1)、允许模块化程序设计

      2)、允许更快执行如果某操作需要大量T-SQL代码或需要重复执行,存储过程将比T-SQL批代码的执行要快。将在创建存储过程时对其进行分析和优化,并可以在首次执行该过程后使用该过程的内存中版本。

      3)、减少网络流量

      4)、一个需要数百行T-SQL代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。

      5)、作为安全机制使用

    3、创建

    create  proc  存储过程名          //不需要写返回参数类型
    
       参数 
    as                          //as 后面写和函数体,只有开始没有结束
    
       函数体
    
    return 值             

    实例:

    create proc JiaFa      
    
    @a int;
    
    @b int;
    
    as
    
      declare @c int;
    
      select @c = @a + @b;
    
       return @c
    View Code

    3、调用
     exec 存储过程名

    实例:

    declare @f int;
    
    exec @f = JiaFa 3,5;
    
    print @f;
    View Code

    二 触发器

       是一类特殊的存储过程,在对表update,insert或delete语句时来触发它, 没有参数,没有返回值;
       一个表的一个动作只能有一个触发器

    1 创建

    create trigger  触发名称    //命名规范   表名_动作
    
    on   表名                  //针对于哪一个表
    
    for   动作                 //针对于哪一个动作来触发
    
    as  
    
       触发器内容

      2、for 触发器

              在动作执行之后触发(增删改执行完成后,触发器中的代码再执行)

      3、instead of触发器

             替代触发操作执行,写了这个之后,写的执行代码就没有用了,就被触发器的代码覆盖了

    例:

    create triggre users_delete
    
    on users
    
    for delete
    
    as
       
       select * from usere
    View Code
    create trigger users_delete
    
    on users
    
    instead of delete 
    
    as
    
      select * from deleted
    
      --每次执行删除命令时打印要删除的那一个
    View Code

      deleted    -- delete的过去式,要删除的那一个。只能用在触发器中 

      三 级联删除 

                触发器最根本最基础最常见的用法

    create  trigger class_delete
    
    on class
    
    instead of delete
    
    as                                    // 要删除class表数据,class 表被 users 表外键约束,那么需要级联删除
        declare @sno varchar(20);
    
       select @sno = sno from deleted      //deleted固定格式,为删除执行所要删除的数据,这里并没有执行删除,而是把他们显示出来
    
                                           //在这里获得要删除的数据的 键值,然后先删除其他表中此 键值 对应的数据
      delete from score where sno = @sno;
      delete from student where sno = @sno;
  • 相关阅读:
    xshell的安装及连接linux的使用方法
    linux中yum install 命令无效
    linux-centOS环境下安装jdk8
    centOS不显示ipv4地址的解决办法
    centOS开启和关闭防火墙
    java-分布式-索引
    java-网络通信-索引
    java-中间件
    java-框架-索引
    JVM-索引
  • 原文地址:https://www.cnblogs.com/Tanghongchang/p/6560462.html
Copyright © 2020-2023  润新知