使用查询完成 sql 同步



我想将数据从离线数据库同步到在线数据库。目前,我正在使用具有某些条件的查询来执行它。但是,同步后在脱机数据库中编辑的数据在下次同步时不会再次同步到联机。有没有简单的方法来更新在线数据库中编辑的数据。 我目前的查询如下所示:

INSERT INTO OPENQUERY([103.21.58.192], 'SELECT * FROM [amurajbg_ss].[dbo].[AccLedgers]') 
SELECT * 
FROM OPENQUERY([USER-PCSQLEXPRESS],
'DECLARE @LastSyncDate AS DATETIME   
DECLARE @CurrentSyncDate AS DATETIME 
SELECT @CurrentSyncDate = GETDATE() 
SELECT @LastSyncDate = LastSyncDate 
FROM [CrushMate].[dbo].[Sync] 
SELECT * FROM [CrushMate].[dbo].[AccLedgers] 
WHERE CreatedDate BETWEEN @LastSyncDate AND @CurrentSyncDate 
AND Status=''True'' ')

我的联机数据库服务器不允许我执行复制,因为我没有执行此操作的权限。唯一的方法是通过这样的查询。

谢谢

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'

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

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 

相关内容

  • 没有找到相关文章

最新更新