Microsoft Sync Framework 2.0:是否可以在同一个同步事务(客户端上载服务器更新)方案中更新列值?

时间:2010-08-31 19:14:14

标签: sql-server-2005 triggers microsoft-sync-framework

假设我有一个包含2列的表(OrderId和OrderDate)。在最初的设计中,OrderId是代理(对于最终用户仍然有些意义,因为他们仍然喜欢引用OrderNumber 12345)PK与IDENTITY整数。由于我们开始采用SyncFx并支持离线客户端创建方案,因此我们决定添加新的列唯一标识符(GUID)作为新PK。

在我原来的工作 V1.0实现中,OrderId将被指定为离线创建记录的负值(-1,-2等)。当同步发生时,OrderId将被重新分配'next'号码(服务器将在表中的OrderId列上执行max()+ 1)。逻辑作为存储过程实现,并在插入触发器期间调用。

Update INSERTED set OrderId = b.NextNumber
FROM INSERTED a,
(
    SELECT SyncGUID, ROW_NUMBER() OVER (ORDER BY SyncGUID) + (SELECT MAX(OrderId) MaxID FROM Order) as NextNumber
    --select * 
    FROm Order 
    where OrderId <= 0
) b
where a.SyncGUID = b.SyncGUID

然而,在V2.0中,在syc之后,在服务器端创建记录并且OrderId确实被更新(从-1到'next'号码);但是,更新更改未下载到客户端。我想知道

  1. 我调查了_selectchanges()SProc中的逻辑。我好像 我可能需要手动操作 [local_update_peer_timestamp]以便选择枚举 它了吗?!
  2. 由于整个逻辑在插入触发器内运行(其中 记录仍未提交给实际表格,我也是 想知道是否有可能再次调用枚举 将记录提交到服务器表后。 (没有打电话 另一个同步)
  3. 在这种情况下,“INSTEAD OF INSERT”触发器会提供任何帮助吗?! 我尝试了一些时间但没有用我有限的知识来解决问题。

1 个答案:

答案 0 :(得分:0)

您的更改未被下载,因为它是在Sync的触发器内完成的,因此同步元数据没有得到更新以显示发生了更改。

我建议尝试在您自己的插入触发器中实现您的代码,而不是在Sync创建的触发器内部进行工作。

此外,您不希望使用INSTEAD OF触发器,因为这将取代Sync Framework为其更改跟踪所需的工作。

通过这种方式创建自己的触发器,您的触发器将插入更改,并在该表的下一次同步时,将获取该更改。