MSSQL,ORACLE等数据库都有MERGE语句,用于更新表很方便。但源表和目标表来自不同数据库时,就很难直接使用MERGE语句了。这时候,可以用集算器来协助处理。
参数source和target代表两个结构相同但数据不同的表,分别属于两个不同的数据库,要求以主键为标准用source更新target,比如table1和table2的主键都是A和B,数据如下:
用table2更新table1之后,table1应当如下:
集算器代码:
A1,A2:从系统表中读出表source的主键存入变量pks,计算结果为”A,B”。各种数据库获得主键的方法不同,这里以MSSQL为例。myDB2/myDB1分别指向source/target所在数据库。
A3,A4:以游标的方式读取source和target,后续的归并运算要求归并项(即主键)有序,故要排序。
A5:将target和source进行左链接。@x表示操作游标,@1表示左连接。${columns}是宏,可将字符串转化为表达式。
A6:从游标A5中循环取数,每次一千条。在循环体B6-B9中可以用A6来引用循环变量。下图是A6的结构:
B6,B7:取出需要insert的记录,并更新target。选项@i表示只生成insert语句,不进行全表扫描。
B8,B9:取出需要update的记录,并更新target。选项@u表示只生成update语句。函数array可以获得字段名列表。
循环结束后可以看到target(table1)已被更新:
这个方法也可以应用于那些不支持MERGE语句的数据库,如MySQL。
相关推荐
详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询
0709-动态SQL-merge-into.sql
sql学习 merge灵活之处.sql
MERGE语句是SQL语句的一种。在SQL Server、Oracle数据库中可用,MySQL、PostgreSQL中不可用。MERGE是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表(原数据表,source table)或子...
sql学习 merge误区探讨.sql
sql学习 merge经典案例.sql
前端开源库-merge-util合并实用程序,深度合并对象实用程序
sql学习 merge有啥用途.sql
Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。通过本篇文章给大家介绍sqlserver中merge函数用法详解,感兴趣的朋友一起学习吧
SQL server 触发器,在触发Merge过程中,逐行触发的解决办法 用group by 避免是一次触发中的多行更新或删除。
做项目的时候通常版本与版本比较,因为下一个版本跟前一个版本差一点,可一般我们做多后查不出来,用WinMerge能很简单的查出来增加了哪里........
前端开源库-jsonmergejson merge,合并json文件
Araxis Merge是一款比对软件工具,不仅支持单个文件的比对,而且支持对两个文件夹的所有文件进行对比,并实时修改。用了蛮久感觉很好用,所以分享给大家。 里面给大家内嵌了Araxis Merge v6.5和Araxis Merge 2017两...
博客《ListView滑动删除实现之一——merge标签与LayoutInflater.inflate()》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/45155965
Merge Sort 算法的C语言实现 linux 下编译;windows下没试过,也许需要改头文件
SQL Server 2008将包含用于合并两个行集(rowset)数据的新句法。根据一个源数据表对另一个数据表进行确定性的插入、更新和删除这样复杂的操作,运用新的MERGE语句,开发者用一条命令就可以完成。对两个表进行信息同步...
merge 比较工具 merge 比较工具merge 比较工具
免费Merge比较工具 win Merge
本文探讨如何在不同的数据库中使用这些MERGE语句。我们将检查其他替代方法,因为所有数据库和版本都不支持MERGE语句。