Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Secuencial al borrar registros

Estas en el tema de Secuencial al borrar registros en el foro de SQL Server en Foros del Web. Saludos gente del foro. Estoy desarrollando un aplicativo en el cual debo tener un numero secuencial por registro, pero a veces las digitadoras se equivocan ...
  #1 (permalink)  
Antiguo 15/10/2014, 18:45
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años
Puntos: 0
Secuencial al borrar registros

Saludos gente del foro.

Estoy desarrollando un aplicativo en el cual debo tener un numero secuencial por registro, pero a veces las digitadoras se equivocan y borran un registro mientras estan ingresando los campos y el secuencial se elimina en el ultimo registro y continua saltando ese numero, por ejemplo:

resgistros 1, 2, 3, 4, eliminan el registro correspondiente al secuencial 4, y el numero que sigue es el 5 por tanto los registros quedan:
id producto
1 Producto1
2 Producto2
3 Producto3
5 Producto3
...
...
...

Lo que se requiere es que la secuencia no se interrumpa hasta que yo la mande a 1 en otro proceso, obteniendo una tabla de registros continua y sin interrupciones.

No soy tan experto en SQL Server, pero el campo Autoicrement no me sirve por que salta el ultimo numero generado, utilizo la version 2012 por que trae secuenciales pero el resultado es el mismo.
Espero que alguien por favor me ayude.


Gracias.
  #2 (permalink)  
Antiguo 16/10/2014, 06:56
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Secuencial al borrar registros

magicamente no se va a solucionar tu problema, hay varias opciones para hacer lo que quieres, una es que uses un trigger y que no uses autoincremental sino que tu vayas generando tus consecutivos y hasta que se inserte en la tabla que menciones que continue, ahora esto como afectaria el "isolation level" de tu base de datos??? tendrias que bloquear la tabla donde se insertan los registros de manera temporal para que nadie mas accese a la misma hasta que termines tu validacion, una vez terminada la validacion podrias continuar, lo otro es que tengas en tu tabla principal las transacciones con id's "salteados" y en digamos al final del dia cuando no hay mas transacciones muevas esta informacion a tu tabla que esta "bien" entonces como ya no habria errores en el numero de transacciones podrias tener la numeracion como la quieres.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 16/10/2014, 09:59
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años
Puntos: 0
Respuesta: Secuencial al borrar registros

Libras..

Gracias por responder, como decía no soy tan experto en SQL Server, y me has puesto a pensar en eso de Isolation Level, por otro lado estaba pensando en un store procedure para almacenar.

Estoy utilizando uno para ingresar clientes a la DB (es un proceso similar va a ser menos usado), y voy calculando el ultimo
Código SQL:
Ver original
  1. ALTER PROCEDURE [dbo].[SP_INSERTCLIENTE]
  2. @RAZON_SOCIAL NVARCHAR(300),
  3. @DIRECCION NVARCHAR(300),
  4. @CONTACTO NVARCHAR(90),
  5. @CIUDAD NVARCHAR(50),
  6. @PAIS NVARCHAR(50),
  7. @ESTATUS NVARCHAR(50),
  8. @CREADO_POR NVARCHAR(50),
  9. @FECHA_CREACION DATETIME,
  10. @ACTUALIZADO_POR NVARCHAR(50),
  11. @FECHA_ACTUALIZACION DATETIME,
  12. @TELEFONO1 NVARCHAR(20),
  13. @TELEFONO2 NVARCHAR(20),
  14. @EMAIL NVARCHAR(70),
  15. @OBSERVACION NVARCHAR(350)
  16. AS
  17.     BEGIN
  18.         #################################
  19.         DECLARE @MAXCLIENTE INT;  
  20.         SELECT @MAXCLIENTE = MAX(CLIENTE_CODIGO) FROM CLIENTES;  
  21.         DBCC CHECKIDENT(CLIENTES, RESEED, @MAXCLIENTE)
  22.         #################################
  23.        
  24.         INSERT INTO CLIENTES
  25.         (RAZON_SOCIAL, DIRECCION, CONTACTO, CIUDAD, PAIS, ESTATUS,
  26.         CREADO_POR, FECHA_CREACION, ACTUALIZADO_POR, FECHA_ACTUALIZACION, TELEFONO1,
  27.         TELEFONO2, EMAIL, OBSERVACION
  28.         )VALUES
  29.         (@RAZON_SOCIAL, @DIRECCION, @CONTACTO, @CIUDAD, @PAIS, @ESTATUS,
  30.         @CREADO_POR, @FECHA_CREACION, @ACTUALIZADO_POR, @FECHA_ACTUALIZACION, @TELEFONO1,
  31.         @TELEFONO2, @EMAIL, @OBSERVACION)
  32.     END

En la parte señalada obtengo el ultimo y hago un reseed y así puedo obtener un secuencial, no se si sea lo mejor para mi caso.

Saludos

Última edición por gnzsoloyo; 16/10/2014 a las 10:21 Razón: Por favor, usar los HIGHLIGHT cuando se publica código. Hay uno "SQL"
  #4 (permalink)  
Antiguo 16/10/2014, 10:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Secuencial al borrar registros

para tu caso mejor usa un triger :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 16/10/2014, 10:35
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Secuencial al borrar registros

Creo que debes saber que el IDENTITY, no fue creado para registros que serán afectados por un DELETE.

¿La solución?, no borrar, simplemente tener un campo tipo BIT donde los 1 son activos y los 0 son inactivos.
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 16/10/2014, 10:49
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Secuencial al borrar registros

buen punto mi estimado iislas, se me paso esa pequeña parte :P, cuando vi lo de borrar se me vino a la mente que la transaccion por alguna cosa no era commiteada a la base de datos, y como ya se habia quemado el siguiente identity entonces era donde quedaban los huecos :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 16/10/2014, 14:06
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años
Puntos: 0
Respuesta: Secuencial al borrar registros

Gracias iislas
aunque la verdad si considero necesario eliminarlos, por que manejamos un gran numero de items en nuestro trabajo y si no los elimino probablemente con el pasar del tiempo se generaria lentitud en busquedas que devuelven gran cantidad de registros (en mi trabajo eso es cosa de todos los dias, por que manejamos inventarios de items de nuestros clientes.)

En mi trabajo generamos cajas numeradas y secuenciales, y dentro de las mismas colocamos items tambien numerados y secuenciados y vamos armando la caja con sus items y la almacenamos, es por eso que a veces ya sea una caja o un item debe ser eliminado al momento de la creacion de la caja.

Es cierto que el identity no parece ser adecuado, salvo de la manera en que yo se los expongo anteriormente, aunque no se si sea lo mejor.

Libras...
Talvez conoces Alguna página o link con ejemplos de Triggers para aprender a utilizarlos?

Gracias...
  #8 (permalink)  
Antiguo 16/10/2014, 14:09
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Secuencial al borrar registros

un mejor diseño en tu base de datos podria ser la solucion, para saber mas de triggers, preguntale a google :P

http://www.sqlteam.com/article/an-in...riggers-part-i
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 16/10/2014, 14:25
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años
Puntos: 0
Respuesta: Secuencial al borrar registros

Gracias Libras..
Verificaré si se me facilita esto haciendolo con triggers.
  #10 (permalink)  
Antiguo 16/10/2014, 15:48
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Secuencial al borrar registros

Los TRIGGERS (por un millón de veces mas y no exagero), no fueron creados para "Programar" la lógica o las reglas del negocio.
__________________
MCTS Isaias Islas

Etiquetas: registros, server, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:47.