我在不同的服务器上有两个数据库。我在两者之间创建了一个链接,我希望在定时间隔内插入新数据和特定的更改数据,单向,有一些警告(如果它只是一个直的,一次性副本,我没有问题)。例如:
表1要复制的列:ID,H,W,D,名称,WO,RM,QTY,PN。
表2将具有相同的列,加上:Stage,SD。
我需要按照定时间隔将数据从Table1复制到Table2。该ID是唯一的,它需要检查是否有其他最初复制的数据发生了变化,如果是,则将其替换为新数据并添加新行。即使某些原始数据发生了变化,它也无法取代表2中其他列中的数据。
更新(示例)
Table1
ID H W D Name WO RM QTY PN
40101 32 32 12 Prod1 9501 Front 1 23.1
40102 12 12 6 Prod2 9501 Back 19 29.5
40103 18 36 12 Prod3 9502 Side 5 43.3
Table2
ID H W D Name WO RM QTY PN Stage SD
40101 32 32 12 Prod1 9501 Front 1 23.1 2018-02-15 2018-02-22
40102 12 12 6 Prod2 9501 Back 19 29.5 2018-02-16 2018-02-22
40103 18 36 12 Prod3 9502 Side 5 43.3 2018-02-16 2018-02-22
如上图所示,Table1数据通过SQL插入查询复制到Table2; Table1中的列数多于显示的列数,但这些列是唯一包含的列。有时候Table1中的一行数据会发生变化,可能只有一列,或者除了ID之外的所有行。将数据复制到Table2时,它应插入新记录,更新现有行中已更改的列(仅从Table1复制的列),而不更新Table2中可能已有或可能尚未包含数据的其他列,例如Stage或表2中的SD列。
答案 0 :(得分:0)
在这种情况下,使用Merge
过程是最好的方法。这有效,但也取决于源表和目标表的任何约束。如果表格与data types , constraints
正确对齐,则始终优化合并过程。
CREATE PROCEDURE TableInsert_Update
AS
BEGIN
MERGE Table2 AS TARGET
USING Table1 AS SOURCE
ON (TARGET.id = SOURCE.id)
WHEN MATCHED
THEN
UPDATE
SET TARGET.col1 = SOURCE.col1
,TARGET.col2 = SOURCE.col2
,TARGET.col3 = SOURCE.col3
,TARGET.col4 = SOURCE.col4
--add more columns
WHEN NOT MATCHED BY TARGET
THEN
INSERT (
col1
,col2
,col3
,col4
)
--add more columns
VALUES (
SOURCE.col1
,SOURCE.col2
,SOURCE.col3
,SOURCE.col4
--add more columns
);
END