--代表来源端数据表
CREATE TABLE tblOrg(c1 int primary key,c2 int,c3 nvarchar(10),c4 nvarchar(10),HashKey As CheckSum(c2,c3))
CREATE INDEX idxOrgHash ON tblOrg(HashKey)
--代表目的端数据表
CREATE TABLE tblTar(c1 int primary key,c2 int,c3 nvarchar(10),HashKey As CheckSum(c2,c3))
CREATE INDEX idxTarHash ON tblTar(HashKey)
INSERT tblOrg(c1,c2,c3,c4) VALUES(1,1,'甲','甲')
INSERT tblOrg(c1,c2,c3,c4) VALUES(2,2,'乙','乙')
INSERT tblOrg(c1,c2,c3,c4) VALUES(3,3,NULL,NULL)
INSERT tblTar(c1,c2,c3) SELECT c1,c2,c3 FROM tblOrg
UPDATE tblOrg SET c3='甲甲' WHERE c1=1
UPDATE tblOrg SET c4='乙乙' WHERE c1=2
UPDATE tblOrg SET c3='丙' WHERE c1=3
--比较主键相同,而 CheckSum 不同的纪录,需要更新
UPDATE tblTar SET c2=o.c2, c3=o.c3
FROM tblTar t JOIN tblOrg o ON t.c1=o.c1
AND o.HashKey <> t.HashKey
--比较结果
SELECT * FROM tblOrg
SELECT * FROM tblTar
CheckSum 和ROWVERSION 列不同的时,可以指定列。
本文介绍了一种通过创建带有CheckSum的索引来实现源表和目标表之间的数据同步及校验的方法。通过对比主键相同的记录的CheckSum值来确定是否需要进行更新操作,并给出了具体的SQL脚本实例。

136

被折叠的 条评论
为什么被折叠?



