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