不需要从数据库中进行额外读取就能立即访问数据变化,这一能力可以提高应用程序的吞吐量。当SQL Server 2005执行数据修改时,你就可以得到已被修改的数据,并将它保存下来以方便在后面的事务中使用。你可以使用这个技巧来防止对联机事务处理(OLTP)表进行不必要的读取,或是不使用触发器就执行定制的数据审核。
触发器初步
SQL Server 2005中包括两种类型的触发器:数据定义语言(DDL)触发器与数据操作语言(DML)触发器。为了解如何应用DDL触发器来建立一个强大的服务器或数据库审核解决方案,请参考我的文章:《"http://techrepublic.com.com/5100-9592_11-6070262.html">应用SQL Server 2005来证明Sarbanes-Oxley法规遵从》和《"http://techrepublic.com.com/5100-9592_11-6072139.html">建立你自己的数据库审核方法》。DML触发器为响应数据操作语句执行,并允许你追踪数据库中的任何数据变化。
工作原理
像DML触发器一样,OUTPUT子句利用INSERTED和DELETED表。当数据库引擎中出现数据修改语句时,SQL Server 2005将建立INSERTED和DELETED表,并将它们与已修改的数据一起移植。这些表格的结构与数据被修改的表格结构一样。对删除语句而言,只有DELETED表被移植,并包含从自定义表格中删除的行。同样,对插入语句而言,只有INSERTED表被移植。但是,对更新语句而言,DELETED表中将包含更新前的数据值,且INSERTED表将包含更新前的数据。
应用新的OUTPUT子句,你可以将修改的数据保存在一个临时表或表变量中以备以后使用,从而减少了访问原始表的必要。
假设你的应用程序应用一个由三个语句组成的,修改顾客数据的事务;数据库和你们公司依靠这个应用程序来处理销售信息。由于最近的销售量很大,程序的性能已退化。为说明这一点,考虑下列销售事务: 向五个新顾客销售了产品。每个顾客的信息添加到顾客表中。 对于向这五个顾客出售产品的销售代表而言,他们的代理数据得到更新。 在你的通知系统中增加五个新记录,以便向这些顾客发送感谢信。
第二和第三步操作依靠在第一步插入的信息来完成其任务。例如,除非你能够确定他们向哪些顾客出售了产品,否则你不能把新的产品销售归于你的销售代表。