Изменение ограничения столбца null / not null = ошибка репликации rowguid

У меня есть база данных, работающая под Sql server 2005 с репликацией слиянием. Я хочу изменить некоторые столбцы FK на "not null", поскольку они всегда должны иметь значение. SQL server не позволит мне сделать это, хотя, вот что он говорит:

  • невозможно изменить таблицу. Недопустимо удалять ограничение по умолчанию в столбце rowguid, который используется репликация слиянием. Изменение схемы сбой при выполнении внутреннего процедура репликации. Для корректирующий действий, см. другие сообщения об ошибках которые сопровождают это сообщение об ошибке. Этот транзакция завершилась в триггере. Этот партия была прервана.

Я вообще не пытаюсь изменить ограничения для столбца rowguid, только для другого столбца, который действует как FK. Другие столбцы я хочу быть не null, потому что запись не имеет никакого смысла без этой информации (т. е. на заказчика, имя заказчика).

вопросы: Есть есть способ обновить столбцы ,чтобы быть "не нулевым", не выключая репликацию, а затем снова включить ее? Это даже лучший способ сделать это - должен ли я использовать ограничение вместо этого?

2 ответов


очевидно, SSMS вносит изменения в таблицы, отбрасывая их и воссоздавая. Поэтому просто нужно было внести изменения с помощью оператора T-SQL.

ALTER TABLE dbo.MyTable ALTER COLUMN MyColumn nvarchar(50) NOT NULL 

вам нужно выписать изменения в операторах T-SQL, так как среда SQL Server Management Studio будет стремиться удалить и повторно создать таблицу, а не просто добавить дополнительный столбец.

вам также нужно будет добавить новый столбец в свои публикации.

обратите внимание, что изменение столбца таким образом может нанести ущерб производительности репликации. В зависимости от размера таблицы, которую вы изменяете, может привести к репликации большого количества данных. Считать что, хотя изменение таблицы может быть выполнено в одном операторе, если затрагивается 1 миллион строк, то на подписчике будет создано 1 миллион обновлений, а не один оператор обновления, как принято думать.

руки, улучшенной производительностью.......

для выполнения этого упражнения необходимо:

  1. резервное копирование среды репликации путем создания сценариев всей конфигурации.
  2. удалить таблицу из Репликация на оба издателя / подписчики
  3. добавить столбец на каждом Издатель/Подписчик.
  4. применить обновление локально на каждом Издатель/Подписчик.
  5. добавить таблицу в репликацию.
  6. проверьте, что транзакции Скопированный.