跨库触发器表同步时update数据同步如何实现

跨库触发器表同步时update数据同步如何实现,第1张

分类: 电脑/网络 >> 软件

问题描述:

我在ms-sql中有db-a库(有表aaa),db-b库(有表bbb),db-c库(有表ccc)

表aaa表bbb表ccc中都有id字段,三表中另外分别有(aaa,bbb,ccc)3个字段值要根据id保持一致,

当db-a库(有表aaa)的aaa字段中有一个记录修改能自动触发修改另两个库中表bbb表ccc中对应字段bbb,ccc值

===================================下面例子我看不懂

CREATE trigger [数据库Atr_user] on [user]

for update,insert,delete

as

alter table 数据库B[user] DISABLE TRIGGER [数据库Btr_user]

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

if not exists (select from deleted) --插入

insert 数据库B[user](username,userpass,landtime) select username,password,lastlogin from inserted

else if not exists (select from inserted)--删除

delete 数据库B[user] where id in (select userid from deleted)

else--更新

update [user]

set

[user]username=iusername,

[user]userpass=ipassword

from 数据库B[user] as [user],

inserted as i

where [user]id=iuserid

alter table 数据库B[user] ENABLE TRIGGER [数据库Btr_user]

解析:

什么地方不懂

1 不懂触发器原理以及工作过程

2 不懂那个例子

不懂原理跟过程的话baidu一下会有很多,随便一本将数据库的书都会提到,不再赘述这个例子可能是有点长,我给你翻译一下吧

==================================

CREATE trigger [数据库Atr_user] on [user]

/ 建立触发器的基本语法 在数据库A的user表建立一个名字tr_user的触发器 /

for update,insert,delete

/监视 修改 插入 删除/

as

alter table 数据库B[user] DISABLE TRIGGER [数据库Btr_user]

/ 修改这个表的时候就不要做触发了,disable掉 /

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

if not exists (select from deleted) --插入

/ 如果deleted表为空,那么 /

insert 数据库B[user](username,userpass,landtime) select username,password,lastlogin from inserted

/ 将inserted表(就是对于触发器来说刚刚 入的 )插入到Buser /

else if not exists (select from inserted)--删除

/ 否则 如果 inserted 为空 /

delete 数据库B[user] where id in (select userid from deleted)

/ 那么删除Buser下id是deleted 中出现的id 这里用了in /

else--更新

update [user]

set

[user]username=iusername,

[user]userpass=ipassword

from 数据库B[user] as [user],

inserted as i

where [user]id=iuserid

/ update就很明显了,凡是updated的都来更新,保持一样就可以了 /

alter table 数据库B[user] ENABLE TRIGGER [数据库Btr_user]

这里用了一个技巧,根据inserted 以及deleted 来判断当前是插入或者删除,然后如果是插入的,那么另一个表删除,删除的另一个表插入更新最简单(可能是用来两个表互相交换数据,跟你的目的不一样)

如果你觉得难以理解,单独来创建三个触发器, insert delete update也行,这样就能减少一些判断比如insert

你可以先删除 bbb ccc里面id in inserted的(为了防止重复),然后再全部insert进去

不知道你为什么要这么做,感觉意义不大明显的冗余啊如果是想保留数据,那么定期添加一个计划任务来用数据传输服务多好 再说备份也是很好用的

希望我理解没有错误

SQLserver数据库如何把一张表复制到另一个数据库表中的方法。

如下参考:

1首先,在桌面上单击“ManagementStudio”图标。

2 然后,在绑定布局中,右键单击表test2中的“编辑前200行”选项。的权利

3然后,在这个接口中,选择表test2的所有内容,并右键单击“copy”选项。

4然后,在该接口中右键单击表test1中的“编辑前200行”选项。

5接下来,右键点击界面中的“粘贴”选项。

6最后,在这个接口中显示复制到数据库表test1的内容。

1、选择销售出库表的数据区域(可整列整列选择)→菜单开始→查找和选择→定位条件→空值→这时,活跃单元格框出现在最左上角的空白处,键盘输入“=”→按上箭头或鼠标选择上一个单元格→按着Ctrl回车(结束公式编辑状态)。这样,就完成了数据补值。

2、规范订单号列表→按列排序。经理给的订单号列表是一个单元格存储了很多个单号,这样是无法进行匹配查询的。先将它用逗号分列成横表,再复制选择性粘贴→转置粘贴成竖表。

3、添加表建立数据模型。在销售出库表,整列整列地选择表,点选菜单→PowerPivot→添加到数据模型→勾选我的表含有标题,确认。第一次启动PowerPivot会很慢,要耐心等待。同样道理,将跟踪的订单号也添加进去。

4、在数据模型里面建立关系。“关系”是关系型数据库里面一个很重要的概念,这里不展开,有兴趣可自己上网查。这里应用“关系”,起到数据从一个表传递到另一个表的作用。回到PowerPivot界面,点选菜单的开始→在查看组里选择关系视图。将“表2”的订单号拖到“表1”的单据编号,这样,就建立了1个一对多的关系。

5、用数据模型建数据透视表。菜单插入→数据透视表→选择“使用此工作表的数据模型”,由于之前建立了数据模型,所以这个选项没有致灰→位置选现有工作表,跟踪的订单号!D5,其他内容不需要改,确认。将表2的订单号拖到“行”,将表1的单据编号、产品名称拖到“行”,将表1的实发数量、销售金额拖到“值”。

6、调整数据透视表格式。菜单设计→分类汇总,不显示汇总→报表布局,已表格形式显示。这样,累赘的排列变得清爽了。如果把产品名称从行删除,就更加清爽,容易得出结果,匹配出2条订单(出现在上面),匹配不出的订单在下方。此外,根据实际查询需要,可以将更多字段拖入“行”,这里略。

注意事项:文件的扩展名必须是xlsx,如果用03版的表格(扩展名xls),要先另存为新版excel文件,关闭重新打开才能按上述 *** 作。

将姓名XLS作为数据库文件,在其中输入成绩信息。另外两个文件,仅写入姓名列,成绩列使用VLOOKUP函数把姓名XLS的成绩数据引用过去。

在姓名XLS成绩更新后保存,在打开另外两个文件时,会提示是否更新,点击更新后,成绩就会更新为姓名XLS中的成绩。

如有不明白继续问。

以上就是关于跨库触发器表同步时update数据同步如何实现全部的内容,包括:跨库触发器表同步时update数据同步如何实现、SQL server 数据库 如何把一张表复制到另一个数据库表中、Excel中怎么利用PowerPivot实现跨表的的关联查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10138492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存