简单的两库同步触发器

create database B
go
use B
go
create table man(a int, b int, c int, d int)
go

--
create database A
go
use A
go
create table man(a int, b int, c int)

create trigger tr_man_delete on man
for delete
as
 delete tmpB
 from deleted A, B.dbo.man tmpB
 where A.a=tmpB.a and A.b=tmpB.b and A.c=tmpB.c
go

create trigger tr_man_insert on man
for insert
as
 insert B.dbo.man
 select *, 1 from inserted
go

create trigger tr_man_update on man
for update
as
 update B.dbo.man tmpB set tmpB.a=inserted.a, tmpB.b=inserted.b, tmpB.c=inserted.c
 from inserted, deleted
 where tmpB.a=deleted.a and tmpB.b=deleted.b and tmpB.c=deleted.c
go
 

### 跨触发器的概念 跨触发器是指在一个数据中的操作会触发展开某些动作到另一个数据中。这种机制允许不同数据之间的数据同步或其他交互行为。 ### 创建跨触发器的方法 为了实现在SQL Server中创建和使用跨触发器的功能,可以采用如下方式: #### 方法一:通过链接服务器对象实现 如果两个数据位于不同的实例上,则可以通过配置链接服务器来访问远程数据的对象。下面是一个简单的例子展示如何利用链接服务器创建一个DML触发器,在源数据执行插入操作时向目标数据相应表内添加记录[^1]。 ```sql -- 假设存在两个数据DB1和DB2分别存储于同一台或多台SQL Server实例之上。 CREATE TRIGGER trg_InsertAcrossDatabase ON DB1.dbo.SourceTable -- 定义触发器作用范围为DB1下的SourceTable表 AFTER INSERT AS BEGIN SET NOCOUNT ON; -- 向另一数据的目标表格插入新纪录 INSERT INTO [LinkedServerName].DB2.dbo.TargetTable (ColumnList) SELECT ColumnList FROM inserted; END; GO ``` 这里`[LinkedServerName]`代表已经设置好的链接服务名称;而`DB1`, `DB2`分别是源端与目的端的数据名字;最后部分则是具体的列名列表。 需要注意的是,这种方法依赖于事先建立好合适的链接服务器连接,并确保有足够的权限来进行跨数据的操作。 #### 方法二:在同一实例下直接引用其他数据内的表 当涉及的多个数据同处一个SQL Server实例内部时,可以直接指定完整的三部件命名法(即`database.schema.object`),从而无需额外设定链接服务器即可完成跨调用。 ```sql USE DatabaseOne; -- 切换当前工作环境至第一个数据 GO CREATE TRIGGER trg_UpdateAnotherDbRecord ON dbo.TableInFirstDb FOR UPDATE AS BEGIN IF EXISTS(SELECT * FROM deleted) BEGIN UPDATE SecondDatabase.dbo.AnotherTable SET SomeField = 'Updated' WHERE ID IN (SELECT ID FROM deleted); END END; GO ``` 上述脚本展示了更新事件发生后,基于被删除行的信息去更改第二个数据里特定字段的内容。 以上种方案均能有效地支持SQL Server环境中跨触发器的需求,具体选择取决于实际应用场景以及系统的架构设计等因素。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值