Как получить следующее значение, которое будет использоваться в столбце IDENTITY - PullRequest
6 голосов
/ 16 марта 2010

Я использую DB2 v9 на LUW.

У меня есть столбец, определенный следующим образом:

"ID" BIGINT NOT NULL GENERATED BY DEFAULT<br> AS IDENTITY (START WITH 1, INCREMENT BY 1, CACHE 20,<br> NO MINVALUE, NO MAXVALUE, NO CYCLE, NO ORDER),<br>

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

Я буду использовать эту информацию для написания сценария для проверки «здравомыслия» таблицы, что IDENTITY все еще не поврежден и что его следующее значение на единицу больше, чем самое высокое значение в столбце ID.

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

Ответы [ 3 ]

1 голос
/ 16 марта 2010

Не думаю, что это сработает так, как вы ожидаете. Рассмотрим случай, когда строка вставляется, затем перед вставкой другой строки эта строка удаляется. В этот момент автоматически сгенерированный идентификатор будет (как минимум) на 2 больше, чем самое высокое значение в БД, и это будет правильно. Если вы можете гарантировать, что удаления не будет, это может сработать, но я не уверен, каким будет его использование.

По сути, вы проверяете, работают ли самые основные операции программного обеспечения БД, и, если они этого не делают, что вы собираетесь делать? Сменить поставщиков?

Если дело в том, что вы просто хотите повторно заполнить столбец идентификаторов, тогда выберите select max (id) и повторно заполните столбец в той же транзакции. Вы можете быть уверены, что новые записи не будут вставлены во время повторного заполнения столбца, применяя сериализуемую семантику транзакций уровня изоляции.

1 голос
/ 16 марта 2010

Вы не можете определить следующую личность. Даже если бы вы могли рискнуть быть несинхронизированными к тому времени, когда вы попытаетесь создать новую запись. Единственное, что нужно сделать, это создать новую запись и получить новую личность, выполнить проверку, а затем обновить запись с остальными данными.

Вы можете использовать SELECT IDENT_CURRENT ('yourtablename'), чтобы получить последний сгенерированный. Это то же самое, что и выше. Это работает в T-SQL, но не во вкусе DB2.

0 голосов
/ 22 марта 2010

Если для столбца ID установлено значение ВСЕГДА, у вас не будет проблем с неправильной загрузкой / импортом. Кроме того, функция IDENTITY_VAL_LOCAL может использоваться для получения значения идентификатора.
Подробнее об этой функции здесь

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