Команда, чтобы получить идентичность вновь вставленной записи в Интербазе 2007

StackOverflow https://stackoverflow.com/questions/3880042

Вопрос

В InterBase (я использую 2007 год, я не знаю, если бы это важно), есть ли команда, чтобы получить удостоверение личности вновь вставленной записи, похожее на SCOPE_IDEDITY () на SQL Server?

Это было полезно?

Решение

Нет, InterBase на самом деле не имеет функции идентичности.

Вместо этого INTERBASE имеет функцию генератора. Генераторы видны, как идентичность, но они логически разделены от первичного ключа столбца. Другими словами, генератор, другими словами, даст вам гарантированное уникальное значение, но то, что вы делаете с этим значением, зависит от вас.

Вы можете использовать это значение в качестве основных значений ключей для одной таблицы или для нескольких таблиц. Но на самом деле назначение основной ключевой стоимости - это то, что вы должны сделать сами.

В дополнение не имеет функции, как SCOPE_IDENTITY, InterBase не имеет никакой функции для возврата значений из INSERT утверждение. Поэтому вы не только не только получаете сгенерированное значение первичного ключа от INSERT Заявление, вы также не можете получить какие-либо другие значения, такие как значения, установленные триггером.

Обходные пути

Один из возможных обходных путей для этого является повышение ценности первичного ключа. Таким образом, вы можете сделать что-то вроде следующего (я собираюсь использовать синтаксис хранимой процедуры Interbase для этого примера, поскольку я не знаю, какой язык программирования вы используете, но вы можете сделать то же самое на любом языке программирования):

DECLARE VARIABLE ID INTEGER;
BEGIN
    ID = SELECT GEN_ID(MY_GENERATOR, 1) FROM RDB$DATABASE;
    INSERT INTO MY_TABLE (ID, DESCRIPTION) VALUES (:ID, "Foo");

RDB$DATABASE это системный стол, который имеет только одну запись. Зная стоимость ID, вы можете вернуть его с ProC.

Второй обходной путь должен SELECT запись с использованием альтернативного ключа и прочитайте сгенерированный идентификатор таким образом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top