首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MicrosoftSyncFramework2.0:是否可以在同一同步事务(客户端上载服务器更新)场景中更新列值?

MicrosoftSyncFramework2.0:是否可以在同一同步事务(客户端上载服务器更新)场景中更新列值?
EN

Stack Overflow用户
提问于 2010-08-31 19:14:13
回答 1查看 928关注 0票数 1

比方说,我有一个2列的表(OrderId和OrderDate)。在最初的设计中,OrderId是代理项(对于最终用户来说仍然有些意义,因为他们仍然喜欢使用标识整数引用OrderNumber 12345) PK。由于我们开始采用SyncFx并支持脱机客户端创建场景,我们决定添加一个新的列唯一标识符(GUID)作为新的PK。

在我以前的工作 V1.0实现中,OrderId将被赋值为负值(-1,-2等),用于脱机创建的记录。当同步发生时,OrderId将被重新分配为“next”号(服务器将对表中的OrderId列执行max() +1)。该逻辑作为存储过程实现,并将在插入触发器期间调用它。

代码语言:javascript
复制
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. I研究_selectchanges() SProc中的逻辑。我似乎需要手动操作local_update_peer_timestamp,以便枚举能够获取它?!
  2. ,因为整个逻辑在insert触发器中运行(记录仍未提交到实际表),我还想知道在将记录提交到服务器表之后是否可能再次调用枚举。(不调用另一个同步)
  3. ,在这种情况下,“而不是插入”触发器会提供帮助吗?!我试了几次,但在我知识有限的情况下没有成功。
EN

回答 1

Stack Overflow用户

发布于 2013-08-07 22:35:03

您的更改不会被下载,因为它是在sync的触发器中执行的,因此同步元数据不会更新以显示发生了更改。

我建议尝试在自己的insert触发器中实现代码,而不是在Sync创建的触发器中执行工作。

另外,您将不希望使用INSTEAD OF触发器,因为这将取代其更改跟踪所需的工作同步框架( work )。

通过这样创建您自己的触发器,您的触发器将插入更改,并且在该表的下一次同步时,该更改将被选中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3612361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档