http://topic.csdn.net/t/20041028/09/3498141.html
有A、B两表。B表中记录取自A表
A:
ID(PK), Name, Sex, Job, Address, ….
B:
ID(PK), Name, Address
现想在A上建立触发器,当A中记录发生增加、某个字段(Address)发生更新、记录删除时,对B中的记录进行相应的增加、更新和删除的工作。请问邹建大哥及各位老大,是写成单个触发器还是写成三个触发器好呢?如果写成单个触发器,请问这个触发器怎么写? 我碰到的问题是不知如何在触发器中区分三个不同的操作。请大家帮忙。。。
--写成三个吧,免得在触发器中去判断属于那种操作
--新增同步
create trigger tr_insert_A on A
for insert
as
insert B(ID,Name,Address) select ID,Name,Address from inserted
go
--删除同步
create trigger tr_delete_A on A
for delete
as
delete B from deleted d where B.ID=d.ID
go
--更新同步
create trigger tr_update_A on A
for update
as
if update(Name) or update(Address)
update B set Name=i.Name,Address=i.Address
from B,inserted i,deleted d
where i.ID=d.ID and i.ID=b.ID
谢谢邹建大哥。再问一下,三个触发器与单个触发器相比,性能上会有所不如吗?
另外,如果是这样的两个表,我又应该怎样做呢?呵呵,主要A的关键字段变了
有A、B两表。B表中记录取自A表
A:
Name(PK), Sex, Job, Address, ….
B:
ID(PK), Name, Address
很少来SQL SERVER版 ,不过邹建大名可是如雷贯耳,看你们帖子真长知识呀!!!
请教写成一个触发器怎么写?
某个字段(Address)发生更新
create trigger tr_update_A on A
for update
as
if update(Address)
begin
update B set Name=i.Name,Address=i.Address
from B,inserted i,deleted d where i.ID=d.ID and i.ID=b.ID
end
go
删除
create trigger tr_delete_A on A
for delete
as
delete B from deleted d where B.ID=d.ID
go
俺不是老大,首先声明~
关键字变了无所谓的。
看你的id是自增字段,还是一定长度的编号了。
如是自增字段,你可以这样写:
--新增同步
create trigger tr_insert_A on A
for insert
as
insert B(Name,Address) select Name,Address from inserted
go
--删除同步
create trigger tr_delete_A on A
for delete
as
delete B from deleted d where B.name=d.name
go
--更新同步
create trigger tr_update_A on A
for update
as
if update(Address)
update B set Address=i.Address
from B,inserted i,deleted d
where i.name=d.name and i.name=b.name
如id字段是按某种规则生成的编号,基本一样,只要在增加时,生成编号就可以了。
--写成一个触发器要判断当前操作是什么类型,所以在效率上没有三个好
--写成一个触发器,顺便体现你最后的表的解决方法
create trigger tr_insert_update_delete_A on A
for insert,update,delete
as
if not exists(select * from deleted) --如果是新增
insert B(Name,Address) select Name,Address from inserted
else if not exists(select * from inserted) --如果是删除
delete B from deleted d where B.Name=d.Name
else if update(Name) or update(Address) --如果是更新
update B set Name=i.Name,Address=i.Address
from B,inserted i,deleted d
where i.Name=d.Name and i.Name=b.Name
邹建大哥写的触发器Insert和Delete都没有问题,但是在Update情况下会有如下问题:A表的关键字段Name更新时,B表的Name字段无法更新!!这个问题要怎么解决呢??
create trigger tr_insert_update_delete_A on A
for insert,update,delete
as
declare @r int
set @r=@@rowcount
if @r=0 return
if not exists(select * from deleted) --如果是新增
insert B(Name,Address) select Name,Address from inserted
else if not exists(select * from inserted) --如果是删除
delete B from deleted d where B.Name=d.Name
else if update(Name) and @r>1 --如果更新了Name,则不允许多行,否则不能实现同步
begin
raiserror('不允许同时更新多条记录的主键值,更新被取消!',1,16)
rollback tran
return
end
else if update(Name)
update B set Name=i.Name,Address=i.Address
from B,inserted i,deleted d
where B.Name=D.Name
else if update(Address)
update B set Name=i.Name,Address=i.Address
from B,inserted i,deleted d
where B.Name=D.Name and i.Name=d.Name
分享到:
相关推荐
本系统由Java语言开发,专注于MySQL数据库之间的表数据同步,但不处理表结构的同步问题。在了解这个系统之前,我们先来详细探讨相关知识点。 1. **触发器(Triggers)**:触发器是数据库管理系统中的一个重要概念,...
以下是一个简单的触发器示例,用于将`dbo.regs`表中的新数据同步到另一个数据库中的相同表: ```sql ALTER TRIGGER trigger_Reg_insert ON [dbo].regs FOR INSERT AS BEGIN INSERT INTO OPENROWSET('SQLOLEDB', '...
本示例通过使用子表和触发器来实现表A与表B之间的数据插入同步,以达到实时更新的效果。以下是对这个机制的详细解释: 1. **子表(CHILD表)**: 子表CHILD是用于存储表A和表B之间同步信息的中间表。它有四个字段...
### mssql数据库与oracle数据库通过触发器实现数据表同步 #### 概述 在实际的企业应用环境中,常常需要实现不同数据库平台之间的数据同步。本文档将详细介绍如何利用触发器技术来实现在Microsoft SQL Server(简称...
### 锁相同步触发器的设计 #### 一、引言 锁相同步触发器作为一种重要的控制组件,在变流领域有着广泛的应用。特别是在大容量可控整流系统中,为了减少变流装置高频电流对电网的干扰并降低其对其他监测和保护设备...
在给定的文件中,我们看到一个使用VHDL编写的同步D触发器的源代码,这个触发器是针对Altera的Quartus II软件平台设计的。Quartus II是一款流行的、用于FPGA(Field-Programmable Gate Array)和CPLD(Complex ...
使用仿真工具(如ModelSim、GHDL等)对设计进行模拟,验证D触发器在各种输入条件下的正确行为,包括不同时钟周期和复位信号的不同状态。 6. **应用**: 同步复位的D触发器广泛应用于数字电路设计,如计数器、移位...
SQL Server 触发器实现不同...本文提供了一个使用 SQL Server 触发器实现不同服务器之间的数据同步的解决方案,涉及到了多个知识点,包括 SQL Server 触发器、分布式事务处理服务、链接服务器、存储过程和作业等。
当一个操作(如插入、更新或删除记录)对某个表进行时,触发器可以自动检查其他相关表的数据状态,并根据需要执行额外的操作来保持整个数据库系统的同步与协调。 ### 触发器在多表操作中的作用 1. **数据一致性**...
综上所述,使用Oracle触发器备份表数据是一种高效且灵活的方法,但同时也需要注意其潜在的局限性和挑战。通过合理设计和优化触发器,可以有效提升数据备份的效率和安全性,为数据库管理提供有力的支持。
此外,触发器也可以用于同步相关表的数据,例如,在一个订单表中添加新订单后,可以触发更新库存表的相应操作。 在数据同步的场景中,触发器可以用来实现实时的数据复制或镜像。例如,一个数据库的主服务器上发生的...
在设计更高级的数字系统时,钟控同步RS触发器能够作为构建更复杂逻辑电路的基石,如触发器链、状态机和微处理器等。 总之,钟控同步RS触发器作为数字逻辑设计中的基础元件,不仅在理论教学中占有重要地位,而且在...
在本例中,我们将讨论如何使用MySQL触发器来实现两个表之间的数据同步。 首先,我们要理解触发器的基本概念。触发器由三部分组成:触发事件(如UPDATE)、触发时间(BEFORE或AFTER)和触发动作(即当事件发生时执行...
例如,当一个表中的数据发生变化时,触发器可以确保关联表的数据同步,或者执行复杂的业务规则检查。在"触发器9.18触发器9.18触发器9.18触发器触发器9.18触发器9.18触发器9.18触发器"这个描述中,可能是在强调某个...
主从触发器是为了克服同步触发器的空翻问题而设计的。主从触发器内部包含主触发器和从触发器,主触发器先响应时钟,从触发器后响应,确保在每个时钟周期内状态只改变一次,增强了抗干扰能力。例如,主从RS触发器和...
触发器的关键在于理解和使用这两个临时表以及触发机制。在处理复杂的业务逻辑和数据关联时,触发器可以有效地维护数据的一致性和完整性。但是,过度使用触发器可能会导致性能问题,因为每次操作都会执行额外的SQL...
同步RS触发器的电路结构包括两个反相器和两个控制门(如G3和G4),当CP=0时,这些门被封锁,触发器状态保持不变。而在CP=1时,输入信号R和S可以决定触发器的输出状态。这意味着只有在时钟脉冲的高电平期间,即CP=1时...
第二个触发器`CP_UPDATE`在CP表的`cpbh`字段更新时,同步更新XSCP表中的对应记录。这里使用了`inserted`和`deleted`表,`inserted`表存储更新后的新值,`deleted`表存储更新前的旧值。触发器比较这两个表中的`cpbh`...
触发器的使用通常是为了满足用户在数据操作后立即执行特定业务规则的需求,或者是对整个表的数据进行批量处理。 【标签】包括"触发器"、"数据库"和"SQL Server",这暗示了本教程将深入探讨SQL Server数据库中的...
在企业级应用中,有时我们需要实现在两个不同的数据库之间进行数据同步,比如将一张表中的数据实时地复制到另一张表中,这种需求通常可以通过触发器(Trigger)来实现。本文将详细介绍如何通过创建触发器来监控两张...