Sqlserver中存储过程,触发器,自定义函数:
触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的存储过程,Insert,Update,Delete After触发器:记录被改变之后激活执行 Instead of触发器:记录被改变之前激活执行。 DDL触发器:响应数据定义语言执行时触发执行的存储过程,一般用于执行数据库中的管理任务 审核和规范数据库的操作; 防止数据表结构被更改或删除
After触发器: eg1:提醒电子邮件的触发器:
[sql]
view plain
copy
print
?
- create trigger 订单提醒_Mail?
- on 订单?
- after insert,update,delete?
- as?
- begin?
- print '提醒电子邮件'?
- exec master..xp_sendmail <a href="mailto:'admin@163.com'">'admin@163.com'</a>,?
- @message='订单有更改,请查询确定',?
- @subject='提醒订单有变'?
- end?
create trigger 订单提醒_Mail
on 订单
after insert,update,delete
as
begin
print '提醒电子邮件'
exec master..xp_sendmail 'admin@163.com',--这两个逗号不能省
@message='订单有更改,请查询确定',@subject='提醒订单有变'
end
[sql]
view plain
copy
print
?
- eg2:插入记录回滚?
eg2:插入记录回滚
[sql]
view plain
copy
print
?
- <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?
- <pre></pre>?
- <pre></pre>?
- <pre class="sql" name="code">eg3:触发器的嵌套,有两个触发器,分别定义在两个不同的表上,并且都是对insert操作定义的,?
- 当向其中一个表插入一条数据的时候,同时在另一张表里也插入一条记录来记录本次数据插入的日志,?
- 这个操作就会同时激发两个触发器,举例略。</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?
- @职工号=职工号 from insertedselect @订单日期=订单日期from insertedif(@订单日期) > getdate()print'订单日期有误'elseinsertinto 订单values(@订单号,@供应商号,@职工号,@订单日期)end?
- <pre></pre>?
- <pre></pre>?
- <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 禁止对数据表操作?
- on database?
- for drop_table,alter_table?
- as?
- print '您没有权限对数据表进行操作'?
- rollback</pre><br>?
- <br>?
- <pre></pre>?
- <pre class="sql" name="code"></pre></pre>?
- <pre></pre>?
- <pre></pre>?
- <pre></pre>?
- <pre></pre>?
- <pre></pre>?
- <pre></pre>?
- ?
- </pre></pre></pre>?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|