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

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

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

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

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

7
задан Dale 20 December 2009 в 01:50
поделиться

2 ответа

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

ALTER TABLE dbo.MyTable ALTER COLUMN MyColumn nvarchar(50) NOT NULL 
9
ответ дан 6 December 2019 в 21:14
поделиться

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

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

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

Практическое улучшение производительности. подход .......

Для выполнения этого упражнения вам необходимо: оба издателя / подписчика

  • Добавьте столбец на каждом Издатель / подписчик.
  • Примените обновление локально на каждом Издатель / подписчик.
  • Добавьте таблицу обратно в репликацию.
  • Убедитесь, что транзакции выполняются. Репликация.
  • 3
    ответ дан 6 December 2019 в 21:14
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: