Допустим, у меня есть таблица с 2 столбцами (OrderId и OrderDate).В оригинальном дизайне OrderId является суррогатом (который все еще имеет некоторое значение для конечного пользователя, поскольку они все еще любят ссылаться на OrderNumber 12345) PK с целым числом IDENTITY.Поскольку мы начинаем использовать SyncFx и поддерживать сценарий создания автономного клиента, мы решили добавить новый уникальный идентификатор столбца (GUID) в качестве нового PK.
В моей старой реализации , работающей V1.0, OrderId будет назначен как отрицательное значение (-1, -2 и т. Д.) Для созданных в автономном режиме записей.когда произойдет синхронизация, OrderId будет переназначен со следующим номером (сервер выполнит max () + 1 для столбца OrderId в таблице).логика реализована как хранимая процедура и будет вызываться во время триггера вставки.
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 до следующего номера);однако это изменение обновления не было загружено клиенту.Мне было интересно
- Я изучал логику в _selectchanges () SProc.мне кажется, что мне может потребоваться вручную манипулировать [local_update_peer_timestamp] для того, чтобы перечисление могло его подхватить!!
- Поскольку вся логика выполняется внутри триггера вставки (запись которого еще не передана вфактическая таблица), мне также интересно, возможно ли, чтобы перечисление вызывалось снова после фиксации записи в таблице сервера.(без вызова другой синхронизации)
- Будет ли триггер "INSTEAD OF INSERT" предлагать какую-либо помощь в этом случае ?!Я пробовал несколько раз, но не сработал с моими ограниченными знаниями.