小菜求教,不设主键情况如何不复制重覆的数据?

dusttosky 2015-06-23 01:02:26
统一数据库下,sql2008 , 表B从表A复制数据
A表的数据每小时会更新一次(意思就是A表的数据不断有新增,但是根据唯一约束不会有重覆)
两表都有下面6列.
nul1 nul2 nul3 nul4 nul5 nul6

唯一约束: nul1+nul3+nul4

请教,怎么实现,我要做一个任务计划让B表自动更新A表的新数据过来.

比如.第一次A表有20条数据. B表第一次执行时插入了这20条数据. 然后,当A表发生数据操作时又新增了10条数据,如何在B表已经存在原来的20条记录上,更新这10条记录. 原来的20条记录不能删除.

要求: 1. B表已经更新的数据不能去改动,比如用delete B表然后重新将A表插入复制,不行.
2. 两表前提无法设置唯一主键,只能唯一约束: nul1+nul3+nul4 .
求大神指点一下.
...全文
128 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
巴拉莱卡 2015-06-24
  • 打赏
  • 举报
回复
同意三楼 简洁效率高
Tiger_Zhao 2015-06-23
  • 打赏
  • 举报
回复
方案一、
假如数据中有一个类似时间这样不停增长的字段,就以该字段建索引。
从B表取最大时间,到A表中按时间过滤。
方案二、
A表加一个同步标记的字段。
方案三、
(nul1,nul3,nul4)可以建索引啊,虽然它不是主键,但是有唯一约束可以当主键一样用啊,照样可以用作为 MERGE 的 ON 条件啊。
Landa_Tiny_cui 2015-06-23
  • 打赏
  • 举报
回复
用MERGE语句可以即时更新插入

MERGE Replica AS  R
USING original AS  O ON r.PK=o.PK
WHEN matched  AND (r.FName<>o.FName OR r.Number<>o.Number) THEN
	UPDATE SET r.PK=o.PK,r.FName=o.PK,r.Number=o.Number
WHEN NOT matched BY TARGET THEN INSERT  VALUES (o.PK,o.FName,o.Number)
WHEN NOT matched BY source THEN DELETE
jestymat 2015-06-23
  • 打赏
  • 举报
回复


insert into B
select * from A
where not exists
(select '1' from B
where B.nul1=A.nul1
and B.nul3=A.nul3
and B.nul4=A.nul4
)


34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧