SQL - Identity increment se incrementa en error

 
Vista:

Identity increment se incrementa en error

Publicado por Alberto Valero (25 intervenciones) el 06/05/2009 23:00:35
Saludos,
Una duda, estoy usando sql2005, estoy utilizando en muchas de mis tablas el identity con un seed de 1 como primary, al momento de intentar un insert en la tabla, si hay un error por alguna situacion y el sql no logra insertar el identity se incrementa y al insertar un registro correctamente se salta en la numeracion todos los intentos fallidos, ejemplo:

tabla1.id=1

1.-insert into tabla1 algun valor
2.-Mensaje de error de SQL no se pudo insertar por integridad de datos
3insert into tabla1 algun valor, esta vez sql si inserto el registro

tabla1.id=3

puedo hacer validaciones en el sistema, pero no es el punto, como puedo hacer que inserte el id=2, algun rollback o algo, gracias espero su respuesta.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Identity increment se incrementa en error

Publicado por DALSOM (195 intervenciones) el 07/05/2009 21:10:12
EL IDENTITY , AUN HAGAS UNA TRANSACCION, Y LUEGO UN ROLLBACK, SE PIERDE.

EN MI CASO, LO QUE HICE FUE CREAR UNA NUEVA COLUMNA DE TIPO CHAR(10), Y LLEVO UNA TABLA DE SECUENCIAS, SOLO EN LOS CASOS EN LOS QUE SEA REALMENTE NECESARIO PRESENTAR UNA SECUENCIA.

EN LAS DEMAS TABLAS, PUES, DEJE QUE SE PERDIERA EL IDENTITY.

POR OTRO LADO, SI PUEDES RESETEAR TU IDENTITY.

DBCC CHECKIDENT, CON LA OPCION Reseed.

PERO NO TE RECOMIENDO HACER ESO. ESTUDIA BIEN QUE TAN NECESARIO ES DEVOLVER TU IDENTITY, YA QUE CREO QUE NO SERIA BUENO, ESTAR HACIENDO ESO EN FORMA AUTOMATICA.

SALUDOS,
DALSOM.

PD: TAL VEZ EL SR. ISAIAS ISLAS, PODRIA ABUNDARTE MAS Y CON MEJOR EXPLICACION Y/O VALOR DIDACTICO QUE YO, PERO PERSONALMENTE CREO QUE HAGO LO CORRECTO.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Identity increment se incrementa en error

Publicado por Alberto Valero (25 intervenciones) el 07/05/2009 23:02:52
Saludos DALSOM
que le vez de malo utilizar esta tecnica, en un error utilizar USE database;
GO
DBCC CHECKIDENT ("tabla", RESEED, valor ultimo de id);
GO

las tablas de secuencias las utilizas como primary o solo como display de alguna informacion?

je je si no es mucha indiscrecion quien es el sr ISAIAS ISLAS, hasta luego, gracias por el dato
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Identity increment se incrementa en error

Publicado por pacopaz (143 intervenciones) el 08/05/2009 01:30:45
En realidad no tiene nada de malo usar reseed, pero de verdad quieres añadir a tu script de inserción un reseed cada vez que vayas a insertar un registro? En realidad sería la única forma de forzar el uso del identity para tener una secuencia.
Es una buena solución la propuesta por dalsom (en realidad algo que ver con la forma en la que se implementan los números y las secuencias en oracle). Si creas una función que traiga el número siguiente e implementas transacciones, con sus respectivos commit y rollback (las expresiones try - catch ayudan mucho) podrías tener el mismo resultado, sin necesidad de rehacer el inicio de la secuencia cada vez.
Y como breviario, Isaias es, a mi entender, la persona que más sabe de sql server (administración, programación, manejo y mantenimiento) que he conocido en este foro.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Identity increment se incrementa en error

Publicado por DALSOM (195 intervenciones) el 11/05/2009 15:25:14
COMO DICE PACO, CUANDO HACES UN ROLLBACK, NO PIERDES LA SECUENCIA. ESTO ES UTIL EN AMBIENTES MULTIUSUARIOS, QUE UTILIZAN AL MISMO TIEMPO, LA MISMA TABLA.

HE TRATADO DE EVITAR QUE SE PIERDA LA SECUENCIA DE LA IDENTIDAD, PERO ES CONTRAPRODUCENTE EN UN AMBIENTE MULTIUSUARIOS.
TIENES UN MEJOR CONTROL DE SECUENCIAS COMO DICE PACO, CON UNA FUNCION, Y EN CASO DE CANCELAR LA TRANSACCION, NO PIERDES LA SECUENCIA, YA QUE ES UNA ACTUALIZACION QUE SE DEVUELVE AL VALOR ANTERIOR.

REALMENTE, NO SE POR QUE SE PIERDEN LAS SECUENCIAS DE LA IDENTIDAD AL DEVOLVER UNA TRANSACCION, PERO ASI PASA.

SALUDOS, :)
DALSOM.
REP. DOM.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar