"Столбец нельзя изменить, поскольку он является идентификатором, rowversion или системным столбцом" - но это не

Я получаю эту ошибку:

Столбец нельзя изменить, поскольку он является идентификатором, rowversion или системным столбцом. [Название столбца = BatchClosed]

Но [BatchClosed] - столбец с [BatchClosed] битом, а идентификатор - false.

Я использую Sql Server Compact Edition, и таблица используется при репликации слиянием.

Существуют системные столбцы (_sysIG, _sysCG, _sysCD, _sysP1, _sysMC, _sysMCS, _sysSR) и строка строк для репликации в таблице.

Таблица не помечена как загружаемая только в публикации.

Однако таблица фильтруется, и поле BatchClosed используется как часть этого фильтра:

WHERE surveyorid = convert(int, HOST_NAME()) AND BatchClosed = 0

Когда я тестирую его в Management Studio, подключенном к базе данных Sql Server CE с этим sql, я получаю ту же ошибку

UPDATE tblBatch SET BatchClosed = 0 WHERE BatchClosed = 1 AND SurveyID = 160;

Интересно, что этот sql на самом деле не сделал обновление, потому что нет записей с BatchClosed = 1. (Я предполагаю, что это как-то связано с тем, как работает Sql Server CE)

NB тестовый sql будет работать в Sql Server 2008 R2, но не на версии Sql Server CE после синхронизации

EDIT. Если я попытаюсь обновить любой столбец в этой таблице, я получаю такое же сообщение об ошибке - как будто все столбцы являются системными столбцами, а не только одним из фильтров

EDIT 2 Я проверил свою установку и отметил, что серверные инструменты имели более старую дату установки, а версия x64 - в пакете обновления 1:

Поэтому я отключил компоненты x64, затем загрузил и установил серверные инструменты. Теперь он выглядит следующим образом:

Я сразу потерял свою веб-синхронизацию. Мне потребовался болезненный день для работы через разные тупики, прежде чем я узнал, как это сделать. (Решение здесь: настройка веб-синхронизации для репликации слияния на сервер Sql CE)

Результат? Все равно получите ту же ошибку. :-(

1 ответ

Я могу удалить и вставить в соответствующую таблицу, а также обновить ее следующим образом:

-- Script Date: 05-07-2014 09:26 - ErikEJ.SqlCeScripting version 3.5.2.39
UPDATE [tblBatch] 
 SET [SamplePercentage] = 0
 WHERE BatchId = 2;
GO

Я думаю, вы не можете обновлять какие-либо другие столбцы, поскольку они либо системные (PK, либо rowguid), либо участвуют в фильтрах соединений в публикации. Но чтобы делать обновления, вы можете сделать DELETE, а затем INSERT.

licensed under cc by-sa 3.0 with attribution.