Devolver id

02/07/2003 - 12:40 por Miguel Tubía | Informe spam
Hola,
al hacer una insercción he de decir con que identificador lo he de meter.
Por lo general suelen ser de tipo int o tinyint y no son autonuméricos pq tb
se pueden meter a mano. Si elijo q se meta automáticamente ahora hago un
select max +1, pero claro, esto no es muy bueno q se diga pq puede
haber id's en medio "en blanco" que se desperdiciarían y lo ideal sería
rellenar estos con las nuevas inserciones.
El procedimiento q quiero hacer recibe un parámetro varchar que es el nombre
de la tabla de la q quiero coger el id necesario. Pero no sé muy bien como
hacerlo. Debería recuperar todos los id's de la tabla y mirar uno a uno si
son correlativos. Si lo son todos, entonces el id será el último + 1, si no,
el primer hueco q encuentre será el q coja. Había pensado hacerlo con
cursores, pero ya me diheron otro día q estos no son muy recomendables, y me
gustaría saber como lo podría hacer de otra forma para luego ya investigar
un poco por mi cuenta.
Muchas gracias por su ayuda
Un saludo
 

Leer las respuestas

#1 Carlos Sacristan
02/07/2003 - 13:49 | Informe spam
Creo que deberías estudiar un poco el ejemplo de Miguel para adaptarlo a
lo que necesitas, porque más o menos es esa la situación que tienes. La idea
es que exista una tabla que contenga el próximo identificador para las
tablas que lo necesiten, y que sea un procedimiento almacenado (o mejor aún,
una función, que la podrías usar en la propia sentencia de inserción) el que
te lo devuelva. Como ves en ese ejemplo, no tienes que realizar ninguna
ejecución dinámica de sentencias (que es lo que te obliga algo tipo SELECT
@Id FROM @Tabla) y así evitas tener que entrar en un asunto un tanto
peliagudo.

En cuanto a que sea diferente el tipo de campo, tampoco deberías darle
mucha importancia (ni la necesidad de usar sql_variant), ya que no creo que
utilices otra cosa que no sea un número o una cadena de caracteres. Como el
segundo engloba al primero, cuando tengas que sumar simplemente le haces una
conversión y listo

De todos modos, siempre que puedas (si la tabla no tiene una clave
natural clara o ésta es muy grande), utiliza claves artificiales (IDENTITY o
GUID's), porque éstas son manejadas directamente por el gestor y te quitarás
muchos quebraderos de cabeza. Aunque supongo que si estás pensando en todo
esto es porque no tienes más remedio...


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

(Guía de netiquette del foro)
http://www.helpdna.net/bosqlfaq00.htm
http://perso.wanadoo.es/rubenvigon/foro

(FAQ's de SQL Server)
http://support.microsoft.com/defaul.../70faq.asp
http://www.helpdna.net/bosqlfaq.htm

"Miguel Tubía" <########> escribió en el mensaje
news:
Mostrar la cita
mirando,
Mostrar la cita
bastante
Mostrar la cita
dicho,
Mostrar la cita
puede
Mostrar la cita
tabla
Mostrar la cita

Preguntas similares