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

renumerar registros secuencialmente

Estas en el tema de renumerar registros secuencialmente en el foro de SQL Server en Foros del Web. Buenos días, tengo una duda a la hora de como renumerar registros, tengo una tabla con un campo numérico que deseo modificarlo secuencialmente, con un ...
  #1 (permalink)  
Antiguo 09/12/2014, 05:09
 
Fecha de Ingreso: julio-2009
Mensajes: 22
Antigüedad: 14 años, 9 meses
Puntos: 0
renumerar registros secuencialmente

Buenos días,
tengo una duda a la hora de como renumerar registros, tengo una tabla con un campo numérico que deseo modificarlo secuencialmente, con un ejemplo se ve mejor.

campo y lo que quiero sería
300 300
310 301
320 302
321 303
322 304
323 305
324 306
.... ....

Un saludo
  #2 (permalink)  
Antiguo 09/12/2014, 05:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: renumerar registros secuencialmente

REnumerar registros donde el campo a renumerar es PK se puede considerar como una de las peores prácticas, innnecesaria, e irrelevante.
Más allá de que quede "bonito", carece completamente de utilidad, y si lo que quieres es que en pantalla la tabla aparezca numerada de ese modo, hay modos mucho más eficientes para eso que no impliquen realizar tareas nocivas para la base.

Destaco esto porque un índice que es PK es un indice clúster, el cual tiene ciertas características que serían impactadas por esa accion de renumerado (ver manual de referencia).
Cita:
Índices agrupados y no agrupados descritos
Un índice es una estructura de disco asociada con una tabla o una vista que acelera la recuperación de filas de la tabla o de la vista. Un índice contiene claves generadas a partir de una o varias columnas de la tabla o la vista. Dichas claves están almacenadas en una estructura (árbol b) que permite que SQL Server busque de forma rápida y eficiente la fila o filas asociadas a los valores de cada clave.

(...)

Agrupado

Los índices clúster ordenan y almacenan las filas de los datos de la tabla o vista de acuerdo con los valores de la clave del índice. Son columnas incluidas en la definición del índice. Solo puede haber un índice clúster por cada tabla, porque las filas de datos solo pueden estar ordenadas de una forma.

La única ocasión en la que las filas de datos de una tabla están ordenadas es cuando la tabla contiene un índice clúster. Cuando una tabla tiene un índice clúster, la tabla se denomina tabla agrupada. Si una tabla no tiene un índice clúster, sus filas de datos están almacenadas en una estructura sin ordenar denominada montón.
Una de las consecuencias es que ese indice mantiene el orden físico de los registros en la tabla, con lo que renumerar implica reordenar los registros en la tabla físicamente, y esto quiere decir que cada vez que renumeres debería reescribirse la tabla.
¿Te parece que tiene sentido hacer eso sólo para que aparezcan "lindos" en pantalla?
¿REordenarías los libros de una biblioteca cada vez que agregas o sacas uno? No, seguro que no. Nadie lo hace, simplemente los mantienes ordenados por otras regferencias, y ESO es lo que conviene hacer con las tablas.

Los "huecos" numericos son irrelevantes, porque el sentido de una PK es la identificación unívoca del registro, lograda por su unicidad.

Ahora bien, si ese campo no es PK, la cosa cambia y dependerá de lo útil que sea realizar esa renumeracion... Pero para eso deberíamos primero saber por qué necesitas renumerarlo.
Hacer tareas para que en la base queden "bonitos" los datos no es algo que se necesite, y toda acción innecesaria en una base es por definición antiperformante.
Si yo les pidiese una tarea así a los de Adm. de BBDD de la empresa para la que trabajo, primero me ignorarían, y si insisto obtendría como mínimno una respuesta... grosera, antes de que me respondan "NO".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 09/12/2014, 06:15
 
Fecha de Ingreso: julio-2009
Mensajes: 22
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: renumerar registros secuencialmente

Buenas tardes,
Gracias por tu opinión acerca de los PK y demás.

Realmente no es un PK y la necesidad o no de hacerlo creo que es irrelevante, lo que me interesa saber es como se hace, No te lo tomes como una ofensa, pero no encuentro mucho sentido a saber porque lo tengo que hacer al como se hace.
Un saludo
  #4 (permalink)  
Antiguo 09/12/2014, 06:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: renumerar registros secuencialmente

La pregunta de por qué, es para ver mejor cómo, ya que tal vez no todos los caminos sean convenientes, y entender la razon puede ayudar a ver cuál es el camnino más adecuado.
A veces el problema se soluciona mejro antes de los INSERT, otras al momento de los SELECT, o bien con otras formas. Rara vez hay una unica solución.

Pero bueno, espera que te respondan los más expertos en T-SQL. Yo sólo te hice esas observaciones técnicas en función de ser la tuya una pregunta constante en los foros de BBDD.

Sólo recuerda lo que te dije en una parte: Hacer tareas que no sean obligatorias para el funcionamiento del sistema, tiene siempre imapctos negativos en la performance.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 09/12/2014, 06:39
 
Fecha de Ingreso: julio-2009
Mensajes: 22
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: renumerar registros secuencialmente

El porqué es que deben estar enumerados en orden ya se han borrado lineas y se necesita remuneración secuencial sin saltos ni nada

llegados a un punto deben continuar con la secuencia 300,301,302...
  #6 (permalink)  
Antiguo 09/12/2014, 08:37
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: renumerar registros secuencialmente

en sql server, row_number y con eso obtienes lo que necesitas :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 09/12/2014, 09:37
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: renumerar registros secuencialmente

Hola javierrunto, necesitás el armado de la query también?

Saludos

damimg
DBA Specialist

Etiquetas: campo, registros, 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 19:49.