Как я получаю следующее значение, которое будет использоваться на столбце IDENTITY

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

Мне определили столбец как это:

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

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

Я буду использовать эту информацию для записи сценария, чтобы сделать, "исправность" проверяет таблицу, что ИДЕНТИФИКАЦИОННЫЕ ДАННЫЕ все еще неповреждены и что его следующее значение является одним большим, чем самое высокое значение в столбце ID.

Я не хочу просто сбрасывать значение вслепую. Если таблица не передает проверку работоспособности, я хочу быть уведомленным так, я могу определить то, что заставляет ИДЕНТИФИКАЦИОННЫЕ ДАННЫЕ быть "wacked".

6
задан Michael Potter 16 March 2010 в 17:32
поделиться

3 ответа

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

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

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

1
ответ дан 17 December 2019 в 20:30
поделиться

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

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

1
ответ дан 17 December 2019 в 20:30
поделиться

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

0
ответ дан 17 December 2019 в 20:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: