SQL Server - Llaves primarias

 
Vista:

Llaves primarias

Publicado por m4u (1 intervención) el 03/07/2007 00:40:09
Mi duda es la siguiente:

Es SQL Server 2000, cuando selecciono uno de los atributos como llave primaria, le pongo el identity en yes, así los va creando solo. Por ejemplo, tengo:

id_empleado nombre

1 Carlos
2 Ana
3 Maria
4 Luis

Si elimino los empleados con los id's 3 y 4 (Maria y Luis), y después inserto otro nuevo, el id se pone en 5, porque sigue la secuencia de los que ya tenía, pero lo que quiero saber es como hacer para que despues de eliminar esos 2 empleados me pongo el id en 3 cuando inserte un nuevo empleado, esto porque trabajo con Java, y para mostrarlos en un JComboBox, con el metodo getSelectedIndex obtengo el indice del item pero en el combo, y si pasa esto, con ese metodo se me cae el programa.
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

RE:Llaves primarias

Publicado por Carlos Reyes (49 intervenciones) el 03/07/2007 15:51:59
Lo que quieres no lo puedes realizar, ya que el ident tiene como funcion obtener los numeros consecutivos de la tabla, por lo que si eliminas un elemento guarda en su historial el Id del ultimo numero insertado.

La unica forma que yo conozco es utilizar un TRUNCATE TABLE para reiniciar los indices, pero un truncate table te elimina los registros, por lo que tendrias que respaldar la informacion y volver a guardarla, lo que para mi no es muy valido.

En lugar de utilizar un Ident utiliza en tu query de insercion una sentencia que te obtenga el identificador maximo de tu tabla y le agregue 1, por lo que obtienes la misma funcionalidad de un ident pero con la opcion de poder insertar los numeros que habias borrado(en este caso, si borras el 5 pues el maximo es 4 +1 y te da el ultimo), ejemplo:

--La variable es asignada con el maximo identificador de tu tabla
SET @Var1 = SELECT MAX(ID_1)+1 FROM Tabla1

Para los casos que elimines un registro de enmedio tendrias un problema si lo que realmente quieres es reutilizar esos indices.
La forma que he utilizado yo para identificar los indices que no se encuentran en una tabla(solo los casos e que utilizo llaves de otras tablas) es mediante la obtencion de todos los indices de dicha tabla y filtrar un catalogo por los que no se encuentren en dicho catalogo y de ahi obtengo el minimo, asi voy llenando mi tabla a partir del indice mas pequeño de la otra tabla.

por ejemplo:

SELECT ID_1
FROM Tabla1
WHERE ID_1 NOT IN(SELECT ID_2
FROM Tabla2)

con esta sentencia obtengo loselementos que existen en una tabla pero en otra no, ahora si a este mismo query le agregas el MIN en la seleccion principal pues te dara el minimo de los no existentes y asi puedes ir llenando.

Supongo que debe existir alguna funcion o forma de otener los numeros que hacen falta en una serie de numeros, desafortunadamente no la conozco, si alguien sabe pues seria bueno que la compartiera.

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

RE:Llaves primarias

Publicado por Isaias (3308 intervenciones) el 03/07/2007 18:47:21
Tines razon en NO RECOMENDAR el Identity, para esto caso, pero difiero contigo en que la unica forma de re-iniciar el contador es mediante el TRUNCATE TABLE, existe DBCC CHECKIDENT, pero en el caso mencionado, de nada serviria.

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