主表 MetroIncept 是一个委托单表,主要字段有:
- RecordId,委托单记录号,对应从表的 InceptRecId 字段。
- InceptFareSum, 金额,从表的金额合计值。
- InceptDetailCount, 委托器具数,从表的器具明细记录数。
从表 MetroInceptDetail 是委托单中的委托器具的明细表,主要字段有:
- InceptRecId, 委托单号,对应主表MetroIncept.RecordId。
- FareSum,收费金额
触发器功能要求:
- 当从表(委托明细表)记录改变时(新增、修改、删除),主表(委托单)的记录数字段和金额合计字段进行自动更新。
触发器程序:
-- MetroInceptDetail 新增后触发
CREATE TRIGGER Incept_FareSum_insert ON MetroInceptDetail AFTER INSERT AS
BEGIN
DECLARE @FareSum_insert Money
DECLARE @Counter_insert int
DECLARE @InceptRecId int
SELECT @InceptRecId = MIN(InceptRecId) FROM Inserted
while @InceptRecId is not null
BEGIN
-- 取得新增记录中本委托书号的记录数和金额合计 --
SELECT
@Counter_insert = COUNT(RecordId) ,
@FareSum_insert = SUM(ISNULL(FareSum, 0))
FROM Inserted
WHERE InceptRecId = @InceptRecId
-- 更新委托书 --
update MetroIncept SET
InceptFareSum = InceptFareSum + @FareSum_insert,
InceptDetailCount = InceptDetailCount + @Counter_insert
WHERE MetroIncept.RecordId = @InceptRecId
-- 取得下一个新增委托记录的委托单号 --
SELECT @InceptRecId = MIN(InceptRecId) FROM Inserted
WHERE InceptRecId > @InceptRecId
END
END
go
-- MetroInceptDetail 删除后触发
CREATE TRIGGER Incept_FareSum_delete ON MetroInceptDetail AFTER DELETE AS
BEGIN
DECLARE @FareSum_delete Money
DECLARE @Counter_delete int
DECLARE @InceptRecId int
-- 取得最小的一个委托单
SELECT @InceptRecId = MIN(InceptRecId) FROM deleted
while @InceptRecId is not null
BEGIN
-- 取得删除记录中本委托书号的记录数和金额合计 --
SELECT
@Counter_delete = COUNT(RecordId) ,
@FareSum_delete = SUM(ISNULL(FareSum, 0))
FROM deleted
WHERE InceptRecId = @InceptRecId
-- 更新委托书 --
UPDATE MetroIncept SET
InceptFareSum = InceptFareSum - @FareSum_delete,
InceptDetailCount = InceptDetailCount - @Counter_delete
WHERE MetroIncept.RecordId = @InceptRecId
-- 取得下一个删除委托记录的委托单号 --
SELECT @InceptRecId = MIN(InceptRecId) FROM deleted
WHERE InceptRecId > @InceptRecId
END
END
go
-- MetroInceptDetail 更新后触发
CREATE TRIGGER Incept_FareSum_update ON MetroInceptDetail AFTER UPDATE AS
IF Update( FareSum )
BEGIN
DECLARE @FareSum_delete Money, @FareSum_insert Money
DECLARE @InceptRecId int
-- 取得最小的一个委托单
SELECT @InceptRecId = MIN(InceptRecId) FROM deleted
while @InceptRecId is not null
BEGIN
-- 取得删除记录中本委托书号的记录数和金额合计 --
SELECT @FareSum_delete = SUM(ISNULL(FareSum, 0)) FROM deleted
where InceptRecId = @InceptRecId
-- 取得新增记录中本委托书号的记录数和金额合计 --
SELECT @FareSum_insert = SUM(ISNULL(FareSum, 0)) FROM Inserted
where InceptRecId = @InceptRecId
-- 更新委托书 --
update MetroIncept set
InceptFareSum = InceptFareSum + @FareSum_insert - @FareSum_delete
WHERE MetroIncept.RecordId = @InceptRecId
-- 取得下一个删除委托记录的委托单号 --
SELECT @InceptRecId = MIN(InceptRecId) FROM deleted
where InceptRecId > @InceptRecId
END
END
go
分享到:
相关推荐
SQL Server 触发器实现不同...本文提供了一个使用 SQL Server 触发器实现不同服务器之间的数据同步的解决方案,涉及到了多个知识点,包括 SQL Server 触发器、分布式事务处理服务、链接服务器、存储过程和作业等。
在SQL Server中,触发器是一种特殊的存储过程,它在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行,以实现复杂的数据完整性规则或业务逻辑。本篇将深入探讨触发器的基本概念、类型、分类及如何实现...
- 在一个示例中,我们可以创建一个INSERT触发器,确保每当向员工表插入新记录时,都会自动计算员工的入职年份。 - 另一个例子是使用UPDATE触发器来实现参照完整性的级联更新,当父表的某个字段更改时,自动更新...
SQL Server 触发器是数据库管理系统中的一种机制,用于在执行某些操作时自动执行特定的操作。触发器可以帮助维护数据的一致性和完整性,提高数据库的安全性和可靠性。本文将详细介绍 SQL Server 触发器的语法和使用...
sqlserver 触发器 insert阿 一个关于触发器的小例子
本文将详细介绍如何在SQL Server中创建触发器来实现当本地数据库发生数据插入时,在远程服务器上相应地执行SQL语句,实现数据同步。这通常用于需要跨数据库同步数据的应用场景。 #### 准备工作 在开始之前,确保...
在实际应用中,SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表,当触发器被执行时产生。这是两个逻辑表,存放在内存中,表的结构与被触发器作用的表的结构相同且由系统自动创建和撤销。 使用...
例如,在学生信息表中插入一个新同学的信息记录时,系统将数据插入到学生信息表的同时,也把相应的数据插入到 INSERTED 临时表中。当某个同学退学时,执行 DELETE 语句时,系统将数据从表中删除的同时,自动把删除的...
sqlserver2005触发器sqlserver2005触发器sqlserver2005触发器
根据给定的文件信息,我们可以深入探讨如何在SQL Server中创建一个触发器,该触发器在新用户添加到系统时自动发送电子邮件和短信通知。这一技术应用广泛于各种需要即时通知用户注册确认、账户激活或密码重置的场景中...
SQL Server触发器是一种特殊的存储过程,它会在满足特定条件时自动执行。触发器的执行是由数据表中的数据变化所触发的,例如插入、更新或删除操作。在本文件中,创建了两个触发器:trig_transInfo和trig_delete_...
SQL Server的触发器是一种特殊的存储过程,它在特定的数据操作事件(INSERT、UPDATE或DELETE)发生时自动执行,用于扩展数据库系统的功能,实现更复杂的业务逻辑。触发器可以帮助确保数据完整性,实现级联操作,或者...
在SQL Server中,触发器是一种特殊的存储过程,它在数据更改操作(如INSERT、UPDATE或DELETE)发生时自动执行。...这在数据库设计中是一个实用的技巧,特别是在大型企业级应用中,能够提高数据管理的效率和准确性。
在SQL Server 2005中,触发器是一种特殊的存储过程,它在特定的数据操作语言(DML)事件,如INSERT、UPDATE或DELETE发生时自动执行。触发器可以帮助实现复杂的业务规则和数据完整性,通过扩展SQL语句的功能,提供了...
本文将深入探讨SQL Server触发器在教务管理系统中的应用,以及如何利用其特性来实现高效的数据管理和业务逻辑。 首先,触发器可以确保数据的完整性。在教务管理系统中,可能需要维护一些复杂的业务规则,例如学生的...
在这个例子中,当向Employees表中插入新记录且EmployeeID为空时,触发器会为新员工分配一个唯一的ID。 三、修改触发器 修改触发器通常涉及到使用ALTER TRIGGER语句。你可以添加、删除或修改触发器内部的SQL语句。...
在SQL Server中,触发器和存储过程是两个重要的数据库编程元素,它们对于数据管理和业务逻辑的实现至关重要。本文将深入探讨这两个概念以及如何在实际操作中使用它们。 首先,我们来了解一下触发器(Triggers)。...
/*------存储1 根据用户输入该学生编号,检查是否存在,若存在则显示出*/ Create procedure p1 @sno char(10) ,@sname char(10),@ssex char(2),@borndate datetime,@classname varchar(50) As Begin ...
在数据库综合性实验中,SQL Server触发器的应用是一个重要的研究课题,它在确保数据完整性方面发挥着至关重要的作用。触发器是一类特殊的存储过程,它们是为响应特定的数据库事件而自动执行的。在“学生成绩管理系统...