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;

 

posted @ 2017-03-16 17:03  唐宏昌  阅读(969)  评论(0编辑  收藏  举报