用SQL2008的MERGE语句同步表

业务需要同步两表,就研究了一下2008的新功能,感觉还是不错的,怎么说也是系统的功能,同样的作用应该比自己手动做的好。因为我是从没用过到刚会用,所以也只写这部分的心得,再深的请看专家们的BLOG。
现在我们的目标是让T2表与T1表同步,我直接把完整的MERGE语句帖上来,等下再细说各个部分:
可以看到T1的东东已经过去了,也就是说初步的同步完成了。
现在做一些其它的操作,我们分别插入、更新、删除一条数据:

现在各种数据都有了,1没变,2删了,3改了,4是加的。再运行上面那坨MERGE语句:
可以看到,数据已经完全同步了。看到效果后,我们就可以开始说正文了,我再粘一次MERGE语句,然后一句一句细说
指定要同步的目标表。MERGE是关键字,INTO可有可无,T2是目标表名,AS可有可无,TB_TARGET是表别名。
如果要对目标表加表提示和索引提示,比如WITH(...),加在T2和AS中间就可以了。
指定用来作为同步源的表或其它东东。USING是关键字,T1是原表名或一个子查询,比如一堆JOIN出来的东西用括号括起来。
关联条件,没什么好说的,注意这里开始就用到上面定义的别名了。
这里放到一起说。看到INSERT应该就能猜这段语句的意思是“如果原表有的记录新表没有,就插入”。
NOT MATCHED表示不匹配, BY TARGET表示是新表找不到匹配原表条件(就是上面的ON后写的)的记录, BY TARGET 可以不写,默认就是BY TARGET,但如果要写两个WHEN MATCHED就必须要写,比如上面这个MERGE。
第二三行和普通的插入语句差不多,区别就在于没有目标表名和只能用VALUES不能用SELECT,因为这里都是针对单行的操作。

这个就简单了,如果是原表找不到新表的匹配记录,就把新表的删了。需要注意的就是如果要加上这句,上面的NOT MATCHED必须加BY TARGET。第一行后面的AND部分可以不要,相当于更新的另一个匹配条件,像上面例子中,ID为1的那条数据没有动,但因为能找到匹配记录还是会更新,加上条件就可以避免这种无效操作了。
这行可以都去掉,作用就是输出同步的数据,用过触发器的同学对INSERTED和DELETED两个表应该灰常熟悉,分别放的是更新后的值和更新前的值,看看最后一次MERGE输出的信息就能差不多看出门道了,我就不多说了。如果要调试语句的话,可以加上这句,正常的同步就可以去掉了。最后简单对比一下MERGE和原本同样效果的操作的IO对比

总之,4,5,6,7都是可以去掉的,但4,5,6至少要有一个,这就是MERGE的全部常用语法了。还有一个最后可以加 OPTION查询提示,这个不常用,主要是我不会用,就不说了。
哦对了,MERGE也是可以加TOP的,在第一行的MERGE INTO中间加就行了,不过我觉得比较鸡肋,谁闲着没事就同步一两条的。唯一我能想到的用处就是大数据量同步时分批执行,每次同步N行。
写的比较长,我是按我的思路写下来的,如果觉得看文字费劲,直接把语句复制出来对着帮助看,也能看个七七八八的。

这个好东西,上次我找了半天就没有找到,后来弄到个excel自己转了半天
qty直接放入a表中,出入库也不同i,o区分,出为负,入为正即可
a表:出入库单号,物料编号,日期,数量;只要这列即可,删除b表。
建议选择高版本,就是大约5秒钟的事情。因为要贴图所以花些时间。
代码不想写了,你可以搜索一下旋转表格,不外乎第1列作为列名 select 第2列 union all 第3列 第4列...两三层的exec
有次跟可爱GF看完电影,坐地铁送她回学校。那时候正是冬天,我就戴着口罩(GF没戴),上了地铁也没摘下来。后然地铁人越来越多了,我和GF被稍稍挤开一段距离。 
这时,靠站上来一些人,来了个帅哥。可能此衰哥觉得很有自信,或者是在他哥们面前撑面子,看见我GF就上去搭讪。 
我满脸黑线。。。。这男的不知道她是有伴的。。 
GF眼睛眨巴眨巴的望着我。眼中充满无奈。GF比较文静,跟陌生人不会什么话。 
此男见GF未搭理他,就说给个电话,QQ联系方式吧。。。 
我示意GF别理他。衰男还不放弃。。此时四周的人都把眼光聚集在他身上了。。看来面子问题啊,要不到电话不放弃。  
来源:足球论坛

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值