数据库触发器:SQL Server数据库开发之触发器的实际应用来源: 发布时间:星期五, 2008年7月11日 浏览:1768次 评论:0
说明:由于个人能力有限,文章中难免会出现错误或遗漏的地方,敬请谅解!同时欢迎你指出,以便我能及时修改,以免误导下一个看官。最后希望本文能给你带来一定的帮助。
定义: 触发器是一种特殊类型的存储过程,不由用户直接调用。当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效:UPDATE、INSERT 或 DELETE。触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。 触发器一个应用就是保持和维护数据的完整性及合法性,那么怎么来理解呢?就是说你可以在程序里提交任意数据,然后由触发器来判断数据的完整性及合法性,当然这里只是举例说明,实际应用中不推荐这样用,应该由应用程序来验证数据的完整性及合法性。
---------------- mId int mName nvarchar(40) mNum int DEFAULT 0
---------------- rId int mId int rNum int rDate datetime DEFAULT GetDate() rMode bit DEFAULT 0 好了,数据表已经有了,现在看一下实际的应用。
INSERT INTO uRecord (mId, rNum, rMode) VALUES (1, 100, 0)
UPDATE uMateriel SET mNum = mNum + 100 WHERE mId=1 也就是说代码中要先后处理以上两条语句,才能保证库存的准确性,以ASP代码为例:
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 以上代码可以更新一条入库记录了,但是我们今天要了解的是触发器的应用,那么要在触发器里写什么内容可以简化以上代码呢?下面来创建一个触发器。
INSERT INTO uSysLog (lEvent) VALUES ('用户删除了流水号为:' + CAST(@intID as nvarchar(20) + ',数量:' + CAST(@intNum as nvarchar(20) + ',方向:' + CASE @intMode WHEN 0 THEN '入库' ELSE '出库' END) END 建立好触发器后,现在只要我们删除 uRecord 表中的一条记录,就会在系统日志中增加一条事件日志。
1
相关文章读者评论发表评论 |
|