SQL - Como lo harias tu???

   
Vista:

Como lo harias tu???

Publicado por Khristian (9 intervenciones) el 24/10/2007 20:25:07
Amigos, he tenido algunas dudas al implementar un problema. Algunos me dan una idea, otros otra, y pretendo hacer este hilo para ver mas ideas.

El caso: Tenemos una tabla con tres campos (Solo un ejemplo)

NUMERO | PERIODO | NOMBRE

Numero: es entero y es un correlativo anual, que debemos ir incrementando segun el periodo.
Periodo: Es el año al que corresponde el registro. Cada año reinicia el Numero
Nombre: es uno de mas campos de datos.

Numero-Periodo serñan la clave primaria de la tabla.

El problema surge por que se debe garantizar al 100% que Numero-Periodo no puede quedar saltado.

Ademas, una vez creado el registro se debe informar al usuario el numero creado (Numero-Periodo).

O sea, debo ingresar un nuevo registro y este ya debe tener el Numero que sigue, y ademas una vez ingresado mostrarlo al usuario.

Yo implemente una solucion en un programa que hice en VB con Access.
Lo solucione así:
En una variable entera recupero con un select count(*) from mitabla where periodo=2007
y le sumo 1 (No recuerdo si el +1 lo hice en la consulta o una vez obtenido el valor)

Luego, genero la consulta insert, con el valor generado.

Al ejecutar el insert, como existe la posibilidad que otro usuario haya creado el mismo numero (basta 1 segundo para que pueda suceder), me arrojaria error de clave primaria, entonces controlo ese error, e incremento nuevamente la variable que contiene el Numero a usar ( +1 ).

Y resumo la linea que ejecuta el insert.

este proceso se repetiria por cada vez que el Numero es creado tambien por otro usuario.

Bueno, la cosa es que debe haber un modo mas profesional de hacerlo.

Alguien me dijo: Cuando haces el insert "Bloquea la Tabla", y despues obtienes el valor creado y "desbloqueas la tabla", pero no me gusta por que, si me pasa algo en el PC que bloqueo la tabla...???? no podran usarla los demas.

Pense tambien en un Procedimiento almacenado que con un parametro de salida me devuelva el Numero creado.... pero no se hacerlo.

Espero sus comentarios.

(Este hilo estará en otras secciones tambien, por si lo ven para que no me puteen)
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