加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Sqlserver中存储过程,触发器,自定义函数(三)

发布时间:2020-12-12 14:14:40 所属栏目:MsSql教程 来源:网络整理
导读:Sqlserver中存储过程,触发器,自定义函数: 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的存储过程,Insert,Update,Delete After触发器:记录被改变之后激

Sqlserver中存储过程,触发器,自定义函数:

触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活
触发器的分类:
DML触发器:发生在数据操作语言执行时触发执行的存储过程,Insert,Update,Delete
After触发器:记录被改变之后激活执行
Instead of触发器:记录被改变之前激活执行。
DDL触发器:响应数据定义语言执行时触发执行的存储过程,一般用于执行数据库中的管理任务
审核和规范数据库的操作;
防止数据表结构被更改或删除

After触发器:
eg1:提醒电子邮件的触发器:

[sql] view plain copy print ?
  1. create trigger 订单提醒_Mail?
  2. on 订单?
  3. after insert,update,delete?
  4. as?
  5. begin?
  6. print '提醒电子邮件'?
  7. exec master..xp_sendmail <a href="mailto:'admin@163.com'">'admin@163.com'</a>,--这两个逗号不能省?
  8. @message='订单有更改,请查询确定',?
  9. @subject='提醒订单有变'?
  10. end?
[sql] view plain copy print ?
  1. eg2:插入记录回滚?
[sql] view plain copy print ?
  1. <pre class="sql"name="code"><pre class="sql"name="code">createtrigger 订单提醒_Insert</pre>on 订单after insertasbeginif(select 订单日期from inserted) > getdate()beginprint'订单日期有误'raiserror('订单日期有误',16,5)rollback transactionendend?
  2. <pre></pre>?
  3. <pre></pre>?
  4. <pre class="sql" name="code">eg3:触发器的嵌套,有两个触发器,分别定义在两个不同的表上,并且都是对insert操作定义的,?
  5. 当向其中一个表插入一条数据的时候,同时在另一张表里也插入一条记录来记录本次数据插入的日志,?
  6. 这个操作就会同时激发两个触发器,举例略。</pre><pre class="sql"name="code">Insteadof触发器:不会去执行原来的sql语句,转而执行触发器里面的sql语句,当触发器的sql语句执行完再接着执行原来的sql语句</pre><pre class="sql"name="code">eg1:避免修改后再回滚,减少服务器负担</pre><pre class="sql"name="code"><pre class="sql"name="code"><pre class="sql"name="code">createtrigger 订单提醒_Insert</pre>on 订单insteadof insertasbeginset nocounton;declare--声明多个变量的方法@订单号 varchar(50),@供应商号 varchar(50),@职工号 varchar(50),@订单日期 datetimeselect @订单号=订单号 from insertedselect @供应商号=供应商号 from insertedselect?
  7. @职工号=职工号 from insertedselect @订单日期=订单日期from insertedif(@订单日期) > getdate()print'订单日期有误'elseinsertinto 订单values(@订单号,@供应商号,@职工号,@订单日期)end?
  8. <pre></pre>?
  9. <pre></pre>?
  10. <pre class="sql" name="code">DDL触发器:</pre><pre class="sql"name="code">eg1:禁止对数据表做修改和删除操作</pre><pre class="sql"name="code"><pre class="sql"name="code">createtrigger 禁止对数据表操作?
  11. on database?
  12. for drop_table,alter_table?
  13. as?
  14. print '您没有权限对数据表进行操作'?
  15. rollback</pre><br>?
  16. <br>?
  17. <pre></pre>?
  18. <pre class="sql" name="code"></pre></pre>?
  19. <pre></pre>?
  20. <pre></pre>?
  21. <pre></pre>?
  22. <pre></pre>?
  23. <pre></pre>?
  24. <pre></pre>?
  25. ?
  26. </pre></pre></pre>?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读