日期:2014-05-18  浏览次数:20378 次

提高同步效率问题,大家讨论,在线等,a表和b表,b表中有的数据更新,b表中没有的数据则添加!
逻辑:1.有两张表一张是SRD_PRODUCT_INV,另一张是PRODUCT_INV,通过前表更新后表
          2.
                (1)如果PRODUCT_INV表中有的数据,则更新PRODUCT_INV表数据
                (2)如果PRODUCT_INV表中没有的数据,则添加PRODUCT_INV表数据
                (3)通过Refcom和sizecode字段进行关联        
我用过一些方法,感觉效率都不太高,如何提高?

         


------解决方案--------------------
--更新
update PRODUCT_INV
set PRODUCT_INV.字段=SRD_PRODUCT_INV.字段
from SRD_PRODUCT_INV
where SRD_PRODUCT_INV.Refcom=PRODUCT_INV.sizecode

--插入
insert into PRODUCT_INV
select * from SRD_PRODUCT_INV
where not exists(select 1 from PRODUCT_INV where PRODUCT_INV.sizecode=SRD_PRODUCT_INV.Refcom)
------解决方案--------------------
先通过关联更新有的数据,再插入没有的数据
------解决方案--------------------
gahade(与君共勉) 的方法不错
------解决方案--------------------
--更新
update PRODUCT_INV
set PRODUCT_INV.字段1=SRD_PRODUCT_INV.字段1,
PRODUCT_INV.字段2=SRD_PRODUCT_INV.字段2,
....
from PRODUCT_INV join SRD_PRODUCT_INV
on SRD_PRODUCT_INV.Refcom=PRODUCT_INV.sizecode


--插入
insert into PRODUCT_INV(字段列表)
select 字段列表 from (
select SRD_PRODUCT_INV.*,PRODUCT_INV.字段1 as aa
from SRD_PRODUCT_INV left join PRODUCT_INV
on SRD_PRODUCT_INV.Refcom=PRODUCT_INV.sizecode
)temp
where aa is null

------解决方案--------------------
jacobsan(梅) ( ) 信誉:100 Blog 加为好友 2007-05-18 10:11:18 得分: 0

先通过关联更新有的数据,再插入没有的数据


根据这一方法,楼主可以参考以下方法:

--先通过关联更新有的数据
UPDATE A SET A.字段=B.字段...
FROM PRODUCT_INV AS A
INNER JOIN SRD_PRODUCT_INV AS B
ON B.Refcom=A.sizecode
--通过临时表,再根据临时表插入目标表
SELECT A.Refcom
INTO #T
FROM SRD_PRODUCT_INV AS A
INNER JOIN PRODUCT_INV AS B
ON A.Refcom=B.sizecode

INSERT INTO PRODUCT_INV ...
SELECT ... FROM SRD_PRODUCT_INV AS A
WHERE EXISTS(SELECT 1 FROM #T AS B WHERE B.Refcom=A.Refcom)

------解决方案--------------------
在UPDATE的时候,也可以先执行SELECT ... INTO #T 再根据临时表来更新目标表,这样也更快。
------解决方案--------------------
gahade(与君共勉) ( ) 兄
写得好

我个人觉得对SRD_PRODUCT_INV写个update触发器和insert 触发器好一些,大家觉得呢?