SQL Server - 在2个不同的数据库上同步2个表

Gil*_*lla 16 t-sql database synchronization sql-server-2008-r2

我在与SQL Server 2008 R2相同的服务器上的2个不同数据库上有2个具有相同模式的表.一个表更频繁地更新数据.

现在需要保持这两个表同步.这可能发生在夜间过程中.实现同步的最佳方法是什么.过程?

Mat*_* A. 18

使用MERGE是您最好的选择.您可以控制每个条件.当那么匹配时,那么当它等等时

MERGE - Technet

MERGE- MSDN(好!)

示例A:事务用法 - 表变量 - NO

DECLARE @Source TABLE (ID INT)
DECLARE @Target TABLE (ID INT)

INSERT INTO @Source (ID) VALUES (1),(2),(3),(4),(5)

BEGIN TRANSACTION

MERGE @Target AS T
USING @Source AS S
ON (S.ID = T.ID)
WHEN NOT MATCHED THEN
    INSERT (ID) VALUES (S.ID);

ROLLBACK TRANSACTION
SELECT  'FAIL' AS Test,*
FROM    @Target
Run Code Online (Sandbox Code Playgroud)

示例B:事务用法 - 物理表

CREATE TABLE SRC (ID INT);
CREATE TABLE TRG (ID INT);

INSERT INTO SRC (ID) VALUES (1),(2),(3),(4),(5)

BEGIN TRANSACTION

MERGE TRG AS T
USING SRC AS S
ON (S.ID = T.ID)
WHEN NOT MATCHED THEN
    INSERT (ID) VALUES (S.ID);

ROLLBACK TRANSACTION
SELECT  'FAIL' AS Test,*
FROM    TRG
Run Code Online (Sandbox Code Playgroud)

示例C:事务用法 - Tempdb(本地和全局)

CREATE TABLE #SRC (ID INT);
CREATE TABLE #TRG (ID INT);

INSERT INTO #SRC (ID) VALUES (1),(2),(3),(4),(5)

BEGIN TRANSACTION

MERGE #TRG AS T
USING #SRC AS S
ON (S.ID = T.ID)
WHEN NOT MATCHED THEN
    INSERT (ID) VALUES (S.ID);

ROLLBACK TRANSACTION
SELECT  'FAIL' AS Test,*
FROM    #TRG
Run Code Online (Sandbox Code Playgroud)


jav*_*ipt 7

您可能可以使用 sql server 的 tablediff.exe 命令行实用程序。它可以在两个表之间逐表进行一次性比较,并自动生成sql让您将目标同步到源。

还有一个围绕它的 GUI 包装器http://code.google.com/p/sqltablediff/这使工作变得更加容易。它将为您生成命令行。

然后可以创建定时任务运行命令行,然后执行生成的sql脚本。