.png)
Я использую SQL Server 2008 Std с базой данных, которая публикуется в «транзакционной публикации» для одного подписчика.
Мы не можем вносить изменения в таблицы на издателе, не получив сообщение "невозможно изменить таблицу, поскольку она опубликована для репликации". Это кажется странным, поскольку изменения схемы (или скрипты, запускаемые для этого) должны быть отправлены подписчику. В настоящее время нам приходится удалять всю систему публикации, чтобы вносить изменения в таблицы.
Что я упускаю? Должен же быть способ обновить таблицы издателей?
Спасибо!
решение1
Изменение таблицы, которое вы пытаетесь сделать, скорее всего, было сделано в графическом дизайнере таблиц в SSMS. Реализация изменений таблиц через графический дизайнер плохая.
При сохранении изменений SSMS запускается и копирует всю таблицу в новую таблицу с новым дизайном, затем удаляет «старую» таблицу и переименовывает новую, чтобы заменить ее.
Имейте в виду, что порядок столбцов не имеет большого значения для таблиц, хранящихся в SQL Server, нет необходимости добавлять новые столбцы в «середине» таблицы, за исключением того, что это может выглядеть лучше :=)
Поскольку ваша таблица находится в транзакционной репликации, SSMS не может выполнить фоновый оператор удаления таблицы, и вы получаете указанное вами сообщение об ошибке.
Чтобы внести необходимые изменения (добавить или удалить столбец), вам необходимо выполнить команды в T-SQL
ALTER TABLE dbo.Table ADD NewCol int NULL;
ALTER TABLE dbo.Table DROP COLUMN NewCol;
Обратите внимание, что синтаксис команды непоследователен (спасибо, MS!). Добавление столбца не требует/не допускает указания ключевого слова COLUMN, тогда как удаление требует этого.
Если репликация правильно настроена для репликации изменений схемы, эти команды будут работать и передаваться подписчику.
Изменения в таблице можно вносить таким образом, за исключением изменения первичного ключа. PK требуется для работы транзакционной репликации и не может быть изменен. Вам нужно будет удалить статью из репликации, если вы захотите изменить эти столбцы.
Надеюсь, это поможет.