SQL Server - synchronizing 2 tables on 2 different databases

前端 未结 3 902
-上瘾入骨i
-上瘾入骨i 2020-12-13 03:04

I have 2 tables with same schema on 2 different databases on the same server with SQL Server 2008 R2. One table gets updated with data more often.

Now there is a nee

3条回答
  •  时光取名叫无心
    2020-12-13 03:17

    Using MERGE is your best bet. You can control each of the conditions. WHEN MATCHED THEN, WHEN UNMATCHED THEN etc.

    MERGE - Technet

    MERGE- MSDN (GOOD!)

    Example A: Transactional usage - Table Variables - 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
    

    Example B: Transactional usage - Physical Tables

    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
    

    Example C: Transactional usage - Tempdb (local & global)

    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
    

提交回复
热议问题