分类: 电脑/网络 >> 软件
问题描述:
我在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实现跨表的的关联查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)