Я использую 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".
Я не думаю, что это будет работать так, как вы ожидаете. Рассмотрим случай, когда вставляется строка, затем перед вставкой другой строки эта строка удаляется. В этот момент автогенерируемый id будет (по крайней мере) на 2 больше, чем наибольшее значение в БД, и он будет правильным. Если вы можете гарантировать, что удаления не произойдет, это может сработать, но я не уверен, что это будет полезно.
По сути, вы проверяете, работают ли самые основные операции программного обеспечения БД, и если нет, что вы собираетесь делать? Сменить поставщика?
Если вы хотите просто перезалить столбец идентификации, то сделайте select max(id) и перезалейте столбец в той же транзакции. Вы можете быть уверены, что во время повторного заполнения столбца не будут вставлены новые записи, обеспечив семантику транзакции уровня изоляции с возможностью сериализации.
Вы не можете определить следующую личность. Даже если бы вы могли это сделать, вы рискуете тем, что данные будут рассинхронизированы к тому времени, когда вы попытаетесь создать новую запись. Единственное, что можно сделать, это создать новую запись, получить новую личность, выполнить проверку, а затем обновить запись с остальными данными.
Вы можете использовать SELECT IDENT_CURRENT('yourtablename'), чтобы получить последнюю созданную запись. Здесь есть та же оговорка, что и в предыдущем случае. Это работает в T-SQL, не уверен, что в DB2.
Если для столбца ID установлено значение GENERATED BY ALWAYS, у вас не будет проблем с неправильной загрузкой / импортом. Кроме того, функция IDENTITY_VAL_LOCAL может использоваться для получения значения идентичности.
Подробнее об этой функции здесь