SQL Server兩表數據同步的幾種方法


一、引言

A表數據同步至B表的場景很常見,比如一個公司有總部及分廠,它們使用相同的系統,只是賬套不同。此時,一些基礎數據如物料信息,只需要總部錄入即可,然后間隔一定時間同步至分廠,避免了重復工作。

二、測試數據

CREATE TABLE StudentA
(
    ID VARCHAR(32),
    Name VARCHAR(20),
    Sex VARCHAR(10)
)
GO
INSERT INTO StudentA (ID,Name,Sex)
SELECT '1001','張三',''
UNION
SELECT '1002','李四',''
UNION
SELECT '1003','王五',''
GO
CREATE TABLE StudentB
(
    ID VARCHAR(32),
    Name VARCHAR(20),
    Sex VARCHAR(10)
)
GO
INSERT INTO StudentB (ID,Name,Sex)
SELECT '1001','張三',''
UNION
SELECT '1002','李四',''
UNION
SELECT '1003','王五',''
UNION
SELECT '1004','趙六',''

三、數據同步方法

3.1、TRUNCATE TABLE

TRUNCATE TABLE dbo.StudentB
INSERT INTO dbo.StudentB SELECT * FROM dbo.StudentA

3.2、CHECKSUM

DELETE FROM dbo.StudentB WHERE NOT EXISTS (SELECT 1 FROM dbo.StudentA WHERE ID=dbo.StudentB.ID)

UPDATE B SET B.Name=A.Name,B.Sex=A.Sex
FROM dbo.StudentA A INNER JOIN dbo.StudentB B ON A.ID=B.ID
WHERE CHECKSUM(A.Name,A.Sex)<>CHECKSUM(B.Name,B.Sex)

INSERT INTO dbo.StudentB SELECT * FROM dbo.StudentA WHERE NOT EXISTS (SELECT 1 FROM dbo.StudentB WHERE ID=dbo.StudentA.ID)

3.3、MERGE INTO

MERGE INTO dbo.StudentB AS T USING dbo.StudentA AS S ON T.ID=S.ID
WHEN MATCHED THEN                --當ON條件成立時,更新數據。
    UPDATE SET T.Name=S.Name,T.Sex=S.Sex
WHEN NOT MATCHED THEN            --當源表數據不存在於目標表時,插入數據。
    INSERT VALUES (S.ID,S.Name,S.Sex)
WHEN NOT MATCHED BY SOURCE THEN  --當目標表數據不存在於源表時,刪除數據。
    DELETE;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM