Каков наиболее эффективный способ получить значение столбца SERIAL после инструкции INSERT? То есть Я ищу способ репликации @@IDENTITY
или SCOPE_IDENTITY
Функциональность MS SQLInformix: как получить идентификатор последней вставленной записи
ответ
Значение последней вставки SERIAL хранится в записи SQLCA как вторая запись в массиве sqlerrd. Ответ Брайана верен для ESQL/C, но вы не указали, какой язык вы используете.
Если вы пишете хранимую процедуру, значение можно найти следующим образом:
LET new_id = DBINFO('sqlca.sqlerrd1');
Она также может быть найден в $sth->{ix_sqlerrd}[1]
при использовании DBI
Есть варианты для других языков/интерфейсов, но я уверен, что вы поймете эту идею.
Я это использовал.
if LOCAL_SQLCA^.sqlcode = 0 then
/return serial */
Result := LOCAL_SQLCA^.sqlerrd[1]
else
/* return error code */
Result := -(Abs(LOCAL_SQLCA^.sqlcode));
Я не думаю, что «эффективное» - это слово, которое вы ищете здесь. Это скорее вопрос точности. Я не уверен, что могу лучше объяснить это, чем может использовать SQL Books Online, но, как правило, если вы действительно не знаете, что делаете, и имеете конкретную причину использования @@ IDENTITY, используйте SCOPE_IDENTITY. Наиболее очевидной причиной этого является то, что @@ IDENTITY не вернет личность последней записи, добавленной вашей программой/sp/etc, если есть триггер, прикрепленный к таблице. Кроме того, могут возникнуть проблемы в приложениях больших объемах, где две операции происходят в то же время и следующее будет происходить ...
- Добавленное
- вставки другого пользователя идентичность
- Верните другого пользователя к вам
Возможно, вы заметили, что вопрос касается Informix, а не MS SQL – 2008-10-30 19:39:44
В OP не указана какая версия Informix используется, поэтому могут быть разные ответы
Это ненадежно - кто-то еще мог добавить новое, большее значение с момента его установки. – 2010-01-23 05:50:21
На каком языке это? Это Паскаль? И отрицание ABS немного странно; если вы не создаете соединение (для которого, к сожалению, есть хотя бы одна положительная ошибка), все номера ошибок в Informix отрицательны. – 2008-11-02 21:04:41