SQL Server T—SQL 存储过程 触发器

一、存储过程

存储过程是一组编译在单个执行计划中的T-SQL语句

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

存储过程的优点:

1、允许模块化程序设计

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

3、减少网络流量

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

5、作为安全机制使用

创建
create  proc  存储过程名          -- 不需要写返回参数类型

   参数 
as                                        -- as 后面写和函数体,只有开始没有结束

   函数体

return 值                            

列:

create proc JiaFa      

@a int;

@b int;

as

  declare @c int;

  select @c = @a + @b;

   return @c
View Code

 

调用
 exec 存储过程名

例:

declare @f int;

exec @f = JiaFa 3,5;

print @f;
View Code

 

二 触发器

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

1 创建

create trigger  触发名称                        --命名规范   表名_动作

on   表名                                             --针对于哪一个表

for   动作                                            --针对于哪一个动作来触发

as  

   触发器内容

 

  for 触发器

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

  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的过去式,要删除的那一个。只能用在触发器中 

  2 级联删除 

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

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;

         

 

转载于:https://www.cnblogs.com/Tanghongchang/p/6560462.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值