--代表来源端数据表
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 列不同的时,可以指定列。