Замена PK в существующих таблицах БД SQL - PullRequest
1 голос
/ 21 октября 2010

Прямо сейчас у меня есть БД, в которой PK int IDENTITY.Недавно, в прошлом году, мне было поручено добавить их в топологию репликации.Это сработало довольно хорошо, за исключением полей IDENTITY.

Я хочу изучить варианты изменения или замены их на uniqeidentifier (GUID).
Возможно ли вставить NEWКолонка PK?
Было бы лучше просто увеличить ее до big int?

Что-нибудь еще, что я должен рассмотреть?


Чтобы уточнить, ПОЧЕМУ я хочу сделатьthis:

Насколько я понимаю, когда репликация встречает столбец IDENTITY, она выделяет диапазон идентификаторов, скажем 1-1000 (по умолчанию), для каждого подписчика, чтобы обеспечить уникальный INT для этого столбца.Чем больше у вас подписчиков, тем больше проблем.Это приводит к ошибкам ограничения проверки диапазона идентификаторов, которые мы продолжаем получать.

Спасибо

1 Ответ

1 голос
/ 21 октября 2010

Если вам действительно нужно удалить столбец INT IDENTITY, то вам придется выполнить следующие действия (более или менее):

  • создайте новый столбец GUID в вашей таблице и заполните его значениями
  • идентифицирует все отношения внешнего ключа, ссылающиеся на эту таблицу и записывая их (например, хранят их сценарии CREATE на диске или что-то в этом роде)
  • добавить новое поле ссылки GUID ко всем ссылочным таблицам
  • заполните эти значения на основе поля INT, которое у вас уже есть
  • удалить все ссылки FK на вашу таблицу
  • бросьте ПК INT INTENTITY на свой стол
  • сделать новый столбец GUID вашим PK
  • удалить старые ссылочные столбцы INT из всех ссылочных таблиц
  • заново создать все ссылки на внешние ключи, используя новый столбец ссылок GUID

Я надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...