专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » 数据库触发器:SQL Server数据库开发之触发器的实际应用 »正文

数据库触发器:SQL Server数据库开发之触发器的实际应用

来源: 发布时间:星期五, 2008年7月11日 浏览:1768次 评论:0

说明:由于个人能力有限,文章中难免会出现错误或遗漏的地方,敬请谅解!同时欢迎你指出,以便我能及时修改,以免误导下一个看官。最后希望本文能给你带来一定的帮助。


不知道在坛子里有多少朋友使用触发器,如果你已经对触发器很了解了,那么请跳过此文,如果你还没有使用过触发器的话,那就让我们来认识一下吧。


QUOTE:

定义:

触发器是一种特殊类型的存储过程,不由用户直接调用。当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或 DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。

触发器一个应用就是保持和维护数据的完整性及合法性,那么怎么来理解呢?就是说你可以在程序里提交任意数据,然后由触发器来判断数据的完整性及合法性,当然这里只是举例说明,实际应用中不推荐这样用,应该由应用程序来验证数据的完整性及合法性。


下面我还是以实例的方式来描述触发器的应用。


假设:当前数据库中有“uMateriel”和“uRecord”两张表,他们分别用来保存物品信息和物品的出入库记录信息,结构如下


QUOTE:uMateriel

----------------

mId   int

mName  nvarchar(40)

mNum   int DEFAULT 0


uRecord

----------------

rId   int

mId   int

rNum   int

rDate  datetime DEFAULT GetDate()

rMode  bit DEFAULT 0

好了,数据表已经有了,现在看一下实际的应用。


现在,我们要购入物品A,数量100,时间为当天,已知物品A的编号为1,那么通常我们需要做以下两个步骤:


QUOTE:1、在 uRecord 记录表中增加一条物品A的购入记录:

INSERT INTO uRecord (mId, rNum, rMode) VALUES (1, 100, 0)


更新 uMateriel 物品库存表中物品A的数量:

UPDATE uMateriel SET mNum = mNum + 100 WHERE mId=1

也就是说代码中要先后处理以上两条语句,才能保证库存的准确性,以ASP代码为例:


QUOTE:On Error Resume Next


'// 设 adoConn 为已经连接的 ADODB.Connection 对象

With adoConn

'// 事务开始,因为涉及到多步数据更新操作,所以在这里使用事务

.BeginTrans

'// 插入物品入库记录

.Execute("INSERT INTO uRecord (mId, rNum, rMode) VALUES (1, 100, 0)")


'// 更新物品库存记录

.Execute("UPDATE uMateriel SET mNum = mNum + 100 WHERE mId=1")


'// 判断是否产生了错误

If Err.Number <> 0 Then

'// 如果有错误,事务回滚

.RollbackTrans

Response.Write "错误!"

Err.Clear

Else

'// 如果没有错误,则提交事务

.CommitTrans

End If

End With

以上代码可以更新一条入库记录了,但是我们今天要了解的是触发器的应用,那么要在触发器里写什么内容可以简化以上代码呢?下面来创建一个触发器。


创建触发器的语法很长,简化为:


QUOTE:CREATE TRIGGER 触发器名 _disibledevent=rMode FROM Deleted


-- 向日志表中插入一条简单的删除事件日志

INSERT INTO uSysLog (lEvent) VALUES ('用户删除了流水号为:' + CAST(@intID as nvarchar(20) + ',数量:' + CAST(@intNum as nvarchar(20) + ',方向:' + CASE @intMode WHEN 0 THEN '入库' ELSE '出库' END)

END

建立好触发器后,现在只要我们删除 uRecord 表中的一条记录,就会在系统日志中增加一条事件日志。


通过以上简单的介绍,希望原来没有使用过触发器的朋友能对触发器有个大致的概念和印象,如果你要深入了解的话,SQL SERVER联机丛书就是你的好帮手。那么触发器的简单应用就介绍到这儿了,我们下次再会。

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: