IT俱乐部 MsSql SQL Server两表数据同步的多种方法详解

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;

到此这篇关于SQL Server两表数据同步的几种方法 的文章就介绍到这了,更多相关SQL Server两表数据同步内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/database/mssql/8723.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部