Получение максимального идентификатора путем сравнения двух разных баз данных - PullRequest
1 голос
/ 17 марта 2011

У меня две одинаковые базы данных на двух разных серверах: один основной и один резервный.Пользователи в настоящее время находятся на обоих серверах.У нас есть столбец OrderId в tblOrder в обеих БД в качестве первичного ключа с автоинкрементом.Теперь, когда я публикую orderid на нашем сервере amazon, он иногда показывает ошибку, потому что orderid в обеих базах данных совпадает, а дублированный orderid не принимается системой.

Я хочу получить максимальный orderid от сервера и затем передать новый orderid текущей рабочей базе данных.Я удалю из него автоинкрементное начальное число, так что по команде вставки я вставлю ордерид вручную.

Ответы [ 2 ]

4 голосов
/ 17 марта 2011

Решения:

  1. Как уже упоминалось, вы можете изменить приращение для каждого поля идентификатора на 2 и иметь один сервер с начальным числом 1, а другой с начальным числом 2.

  2. Предполагая, что вы не планируете обрабатывать более 1 миллиарда заказов на каждом сервере, просто установите начальное число на втором сервере равным 1 000 000 000.Нет необходимости изменять приращение.

  3. Используйте uniqueidentifier (GUID) в качестве первичного ключа, а не целое число.Для SQL Server 2005 и более поздних версий вы можете установить ограничение по умолчанию для NEWSEQUENTIALID (), чтобы предотвратить постоянное создание вставками разбиений на страницы.

1 голос
/ 17 марта 2011

В MS-SQL вы можете указать «Семя» и «Приращение» для поля автонумерации. сделайте Семена разными и установите Инкремент = 2

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