SQL服务器 - 在2个不同的数据库同步2个表(SQL Server - synchronizing

2019-07-04 05:34发布

我有2分表上的SQL Server 2008 R2在同一台服务器上的2名不同的数据库相同的模式。 一个表获取与数据更新频率也更高。

现在有必要保留这些2台同步。 这可能发生,作为夜间处理过程。 什么是实现同步的最好方法。 过程?

Answer 1:

使用合并是最好的选择。 您可以控制每一个条件。 WHEN然后再配,当不匹配的THEN等。

MERGE -的Technet

MERGE- MSDN(GOOD!)

实施例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

实施例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

例如C:事务使用-临时数据库(本地和全球)

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


Answer 2:

你也许可以使用SQL Server的tablediff.exe命令行工具。 它可以做表的表,一次性的两个表之间的比较,并自动生成SQL为你同步的DEST到源。

还有它周围的GUI包装http://code.google.com/p/sqltablediff/这使得工作更加容易。 它会为你的命令行。

然后,您可以创建计划任务运行的命令行,然后执行生成的SQL脚本。



Answer 3:

您可以从不同的数据库中选择和使用游标循环中选择的数据。 内的光标,你可以做一些逻辑和更新,或者从目标表中删除。

此外SQL 2008有,你可以使用一个T-SQL查询来选择/插入/更新一个不错的新的MERGE语句。 http://technet.microsoft.com/en-us/library/bb510625%28v=sql.105%29.aspx

对于更复杂的过程,我使用的第一个选项。 为了更直接同步任务我使用第二个选项。

作为一个额外的选项也有Server集成服务(SSIS): http://blogs.msdn.com/b/jorgepc/archive/2010/12/07/synchronize-two-tables-using-sql-server-integration-服务- SSIS部分-I-的-ii.aspx



文章来源: SQL Server - synchronizing 2 tables on 2 different databases