sqlserver CheckSum

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

你可能感兴趣的:(sqlserver)