У нас есть таблица и набор процедур, которые используются для генерации pk-идентификаторов.Таблица содержит последний идентификатор, и процедуры получают идентификатор, увеличивают его, обновляют таблицу и затем возвращают вновь увеличенный идентификатор.
Эта процедура потенциально может быть внутри транзакции.Проблема состоит в том, что если у нас есть откат, он может потенциально откатить до идентификатора, который находится до любого идентификатора, который использовался во время транзакции (скажем, созданного другим пользователем или потоком).Затем, когда идентификатор снова увеличивается, это приведет к дублированию.
Есть ли способ исключить таблицу генерации идентификатора из родительской транзакции, чтобы этого не происходило?
Чтобы добавить подробности в нашу текущуюпроблема ...
Во-первых, у нас есть система, в которую мы готовимся перенести много данных.Система состоит из базы данных ms-sql (2008) и базы данных textml.База данных sql хранит данные менее 3 дней, в то время как textml выступает в качестве архива для всего более старого.База данных textml также использует базу данных sql для предоставления идентификаторов определенных полей.Эти поля в настоящее время являются Identity PK и генерируются при вставке перед публикацией в базу данных texml.Мы не хотим стирать все перенесенные данные через sql, поскольку записи будут заполнять текущую систему, как с точки зрения трафика, так и данных.Но в то же время мы не можем сгенерировать эти идентификаторы, поскольку они являются автоматически увеличивающимися значениями, которые контролирует сервер sql.
Во-вторых, у нас есть системное требование, которое требует от нас возможности извлекать старый актив избазы данных texml и вставьте ее обратно в базу данных sql с оригинальными идентификаторами.Это сделано для исправления и редактирования, и если мы изменим id, это нарушит отношения вниз по потоку в клиентской системе, которую мы не можем контролировать.Конечно, все это является проблемой, поскольку столбцы идентификаторов являются столбцами идентификаторов.