sql informix identity

sql - Informix: cómo obtener una identificación del último registro insertado



identity (4)

¿Cuál es la forma más eficiente de obtener el valor de la columna SERIAL después de la instrucción INSERT? Es decir, estoy buscando una forma de replicar la funcionalidad @@IDENTITY o SCOPE_IDENTITY de MS SQL


He visto esto usado.

if LOCAL_SQLCA^.sqlcode = 0 then / return serial */ Result := LOCAL_SQLCA^.sqlerrd[1] else /* return error code */ Result := -(Abs(LOCAL_SQLCA^.sqlcode));


No creo que "eficiente" sea la palabra que estás buscando aquí. Es más una cuestión de precisión. No estoy seguro de poder explicar mejor el SQL Books Online, pero en general, a menos que realmente sepa lo que está haciendo y tenga una razón específica para usar @@ IDENTITY, use SCOPE_IDENTITY. La razón más obvia para esto es que @@ IDENTITY no devolverá la identidad del último registro agregado por su programa / sp / etc si hay un disparador conectado a la tabla. Además, podría haber problemas en las aplicaciones de alto volumen donde ocurren dos transacciones al mismo tiempo y ocurriría lo siguiente ...

  1. Su inserción
  2. Inserción de otro usuario
  3. Devolver la identidad de otro usuario a ti

El valor de la última inserción SERIAL se almacena en el registro SQLCA, como la segunda entrada en la matriz sqlerrd. La respuesta de Brian es correcta para ESQL / C, pero no has mencionado qué idioma estás usando.

Si está escribiendo un procedimiento almacenado, el valor se puede encontrar así:

LET new_id = DBINFO(''sqlca.sqlerrd1'');

También se puede encontrar en $sth->{ix_sqlerrd}[1] si usa DBI

Hay variantes para otros lenguajes / interfaces, pero estoy seguro de que entenderá.


El OP no especificó qué versión de Informix se está utilizando, por lo que puede haber diferentes respuestas