本文主要介紹了SQL Server兩表數(shù)據(jù)同步的多種方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
一、導讀
A表數(shù)據(jù)同步至B表的場景很常見,比如一個公司有總部及分廠,它們使用相同的系統(tǒng),只是賬套不同。此時,一些基礎數(shù)據(jù)如物料信息,只需要總部錄入即可,然后間隔一定時間同步至分廠,避免了重復工作。
二、測試數(shù)據(jù)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 | 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' , '趙六' , '女'
|
三、數(shù)據(jù)同步方法
3.1、truncate TABLE
1
2 | truncate TABLE dbo.StudentB
insert INTO dbo.StudentB select * from dbo.StudentA
|
3.2、CHECKSUM
1
2
3
4
5 | 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
1
2
3
4
5
6
7 | MERGE INTO dbo.StudentB AS T USING dbo.StudentA AS S ON T.ID=S.ID
WHEN MATCHED THEN --當ON條件成立時,更新數(shù)據(jù)。
update SET T. Name =S. Name ,T.Sex=S.Sex
WHEN NOT MATCHED THEN --當源表數(shù)據(jù)不存在于目標表時,插入數(shù)據(jù)。
insert VALUES (S.ID,S. Name ,S.Sex)
WHEN NOT MATCHED BY SOURCE THEN --當目標表數(shù)據(jù)不存在于源表時,刪除數(shù)據(jù)。
delete ;
|
到此,這篇關于SQL Server兩表數(shù)據(jù)同步的幾種方法的文章就介紹到這了,希望可以對你有所幫助。
該文章在 2023/9/15 15:52:55 編輯過