<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FoxLing - 前端开发 &#187; trigger</title>
	<atom:link href="http://foxling.org/tag/trigger/feed/" rel="self" type="application/rss+xml" />
	<link>http://foxling.org</link>
	<description>我还在寻找方向</description>
	<lastBuildDate>Tue, 10 Apr 2012 16:48:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>触发器设计技巧与实例</title>
		<link>http://foxling.org/develop/sql-trigger/</link>
		<comments>http://foxling.org/develop/sql-trigger/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 22:28:10 +0000</pubDate>
		<dc:creator>FoxLing</dc:creator>
				<category><![CDATA[开发]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[trigger]]></category>

		<guid isPermaLink="false">http://wp.foxling.cn/as-flex-air/3/</guid>
		<description><![CDATA[　　在数据库设计中，有两种方法可设定自动化的资料处理规则，一种是条件约束，一种是触发器,一般而言，条件约束比触发器较容易设定及维护，且执行效率较好，但条件约束只能对资料进行简单的栏位检核，当涉及到多表操作等复杂操作时，就要用到触发器了。 　　一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息，分别是： 虚拟表Ins&#101;rted 虚拟表Del&#101;ted 在表记录新增时 存放新增的记录 不存储记录 修改时 存放用来更新的新记录 存放更新前的记录 删除时 不存储记录 存放被删除的记录 触发器的种类及触发时机 After触发器：触发时机在资料已变动完成后，它将对变动资料进行必要的善后与处理，若发现有错误，则用事务回滚（Rollback Transaction)将此次操作所更动的资料全部回复。 Istead of 触发器：触发时机在资料变动前发生，且资料如何变动取决于触发器现在介绍一下创建触发器的编写格式： After类型: Cr&#101;ate Trigger 触发器名称 on 表名 after 操作(ins&#101;rt,up&#100;ate) as Sql语句 Instead类型 Cr&#101;ate Trigger 触发器名称 on 表名 Instead of 操作(up&#100;ate,del&#101;te) as Sql语句 实例1: 　　在订单(表orders)中的订购数量(列名为num)有变动时，触发器会先到客户(表Customer)中 取得该用户的信用等级(列名为Level),然后再到信用额度(Creit)中取出该等级 许可的订购数量上下限，最后比较订单中的订购数量是否符合限制。 代码： Cr&#101;ate Trigger num_check on o&#114;ders after ins&#101;rt,up&#100;ate as if up&#100;ate(num) [...]]]></description>
			<content:encoded><![CDATA[<p>　　在数据库设计中，有两种方法可设定自动化的资料处理规则，一种是条件约束，一种是触发器,一般而言，条件约束比触发器较容易设定及维护，且执行效率较好，但条件约束只能对资料进行简单的栏位检核，当涉及到多表操作等复杂操作时，就要用到触发器了。<br />
　　一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息，分别是：<br />
    虚拟表Ins&#101;rted                    虚拟表Del&#101;ted</p>
<p>在表记录新增时   存放新增的记录                        不存储记录<br />
        修改时   存放用来更新的新记录                  存放更新前的记录<br />
        删除时   不存储记录                            存放被删除的记录</p>
<p>触发器的种类及触发时机<br />
After触发器：触发时机在资料已变动完成后，它将对变动资料进行必要的善后与处理，若发现有错误，则用事务回滚（Rollback Transaction)将此次操作所更动的资料全部回复。<br />
Istead of 触发器：触发时机在资料变动前发生，且资料如何变动取决于触发器现在介绍一下创建触发器的编写格式：</p>
<p>After类型:<br />
Cr&#101;ate Trigger  触发器名称<br />
on 表名<br />
after 操作(ins&#101;rt,up&#100;ate)<br />
as<br />
    Sql语句</p>
<p>Instead类型<br />
Cr&#101;ate Trigger 触发器名称<br />
on 表名<br />
Instead of 操作(up&#100;ate,del&#101;te)<br />
as<br />
Sql语句</p>
<p>实例1:<br />
　　在订单(表orders)中的订购数量(列名为num)有变动时，触发器会先到客户(表Customer)中<br />
取得该用户的信用等级(列名为Level),然后再到信用额度(Creit)中取出该等级<br />
许可的订购数量上下限，最后比较订单中的订购数量是否符合限制。</p>
<p>代码：<br />
Cr&#101;ate  Trigger num_check<br />
on o&#114;ders<br />
after ins&#101;rt,up&#100;ate<br />
as<br />
if up&#100;ate(num)<br />
    begin<br />
    if exists(sel&#101;ct a.* from o&#114;ders a join customer b on a.customerid=b.customerid<br />
    join creit c on b.level=c.level<br />
    wh&#101;re a.num between c.up and c.down)<br />
        begin<br />
        rollback transaction<br />
        exec master..xp_sendmail &#39;administrator&#39;,&#39;客户的订购数量不符合限制&#39;<br />
        end<br />
    end</p>
<p>实例2:<br />
有工资管理系统中，当公司对某员工甲的月薪进行调整时，通常会先在表员工中修改薪资列,然后在表员工记录中修改薪资调整时间与薪资</p>
<p>Cr&#101;ate trigger compensation<br />
on 员工<br />
after up&#100;ate<br />
as<br />
    if @@rowcount=0 return<br />
    if up&#100;ate(薪资)<br />
    begin<br />
        ins&#101;rt 员工记录<br />
     sel&#101;ct 员工遍号,薪资,getdate()<br />
        from ins&#101;rted<br />
    end</p>
]]></content:encoded>
			<wfw:commentRss>http://foxling.org/develop/sql-trigger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

