Автоматизировать последовательные целочисленные идентификаторы без использования Identity Specification? - PullRequest
0 голосов
/ 25 февраля 2019

Существуют ли проверенные / действительные методы управления вашим собственным последовательным целочисленным полем без использования встроенной в SQL Server спецификации идентификации?Я думаю, что это должно было быть сделано много раз, и мои сегодняшние навыки Google просто подводят меня.

Моя первая мысль - использовать отдельную таблицу для управления идентификаторами и использовать триггер на целевой таблице.управлять настройкой идентификатора.Очевидно, что проблемы с параллелизмом важны, но производительность вставки в этом случае не критична.

И вот некоторые ошибки, о которых я знаю, что мне нужно обратить внимание:

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

Причина последней маркированной точки (иединственная причина, по которой я хочу сделать это без поля Identity Specification (в первую очередь), заключается в том, что я хочу заполнить несколько сред в разных начальных точках и хочу иметь возможность копировать данные между каждой из них, чтобы идентификатор для заданногозапись остается неизменной между средами (и я должен использовать целые числа; я не могу использовать GUID).

(Также да, я мог бы включить / выключить идентификационную вставку для копирования данных и все еще использовать обычное поле Identity Specification, нозатем он перезапускает его после каждой вставки. Я мог бы , а затем использовал DBCC CHECKIDENT, чтобы перезапустить его туда, где он был, но я чувствую, что риск с этим решением слишком велик.ошибка, и тогда, когда мы осознаем это, было бы настоящей болью восстановить данные ... вероятно, достаточно боли, чтобы этоВо-первых, имело бы больше смысла просто делать то, что я делаю сейчас).

1 Ответ

0 голосов
/ 25 февраля 2019

SQL Server 2012 представил концепцию объекта базы данных SEQUENCE - что-то вроде столбца «личность», но отдельно от таблицы.

Вы можете создавать и использовать последовательности из своего кода, вы можете использовать значения в разных местах и ​​т. Д.

См. Эти ссылки для получения дополнительной информации:

...