使用查询完成SQL同步

时间:2018-09-25 05:21:50

标签: sql sql-server synchronization replication

我想将数据从离线数据库同步到在线数据库。目前,我在某些条件下使用查询执行该操作。但是,同步后在离线数据库中编辑的数据将不会在下一次同步中再次同步到在线。有什么简单的方法可以更新在线数据库中的编辑数据。 我当前的查询如下所示:

ul {
  text-align: center;
  display: inline;
  padding: 0;
  width: 50%;
  position: fixed;
  top: 0;
  left: 50%;
  margin: 0 0 0 -25%;
  list-style: none;
}

我的在线数据库服务器不允许我执行复制,因为我没有这样做的权限。唯一的办法是通过这样的查询。

谢谢

1 个答案:

答案 0 :(得分:0)

But data that are edited in offline database after syncing will not be synced again to online in next sync

您需要在离线数据库的另一列中标识正在编辑的数据。通常,您可以使用UpdatedDate列。每当编辑数据时,此UpdatedDate都会使用当前日期和时间进行更新。如果您的应用程序可以处理此问题,那就很好了。如果没有,您可以使用AFTER UPDATE触发器来处理。

然后,您的sync查询也需要检查UpdatedDate

DECLARE @LastSyncDate AS DATETIME   
DECLARE @CurrentSyncDate AS DATETIME 

SELECT @CurrentSyncDate = GETDATE() 

SELECT @LastSyncDate = LastSyncDate 
FROM   [CrushMate].[dbo].[Sync]

-- the INSERT
INSERT INTO OPENQUERY([103.21.58.192], 'SELECT * FROM [amurajbg_ss].[dbo].[AccLedgers]') 
SELECT * 
FROM   [CrushMate].[dbo].[AccLedgers] 
WHERE  CreatedDate BETWEEN @LastSyncDate AND @CurrentSyncDate 
AND    Status = 'True'

对于更新,使用链接服务器会更容易。您可以参考Here了解更多信息。

UPDATE R
SET    . . . .
FROM   [CrushMate].[dbo].[AccLedgers] A
       INNER JOIN [RemoteServer].[amurajbg_ss].[dbo].[AccLedgers] R
       ON   A.pk_col = R.pk_col
WHERE  A.UpdatedDate   BETWEEN @LastSyncDate AND @CurrentSyncDate