none
Realizar un bucle para renumerar columna RRS feed

  • Pregunta

  • Buenos días

    Tengo una tabla con 1000 ROWS y con dos columnas: (NUMERO, DESCRIPCION)

    El campo descripción lo tengo relleno y el campo NUMERO(INT) esta vacio.

    Lo que quiero es añadir en la columna "NUMERO" en la ROW 1 el numero 58000

    en la columna "NUMERO" en la ROW 2 el numero 58001

    en la columna "NUMERO" en la ROW 3 el numero 58002

    en la columna "NUMERO" en la ROW 4 el numero 58003

    Y asi sucesivamente hasta terminar con las 1000 rows.

    Entiendo que se podría hacer con un ON SEQUENCE....

    Saludos

    miércoles, 15 de mayo de 2019 8:59

Respuestas

  • Un momento, esto requiere aclarar un dato: ¿Qué quiere decir "la ROW 1", "la ROW 2", etc.? Recuerda que en un servidor de base de datos relacional las filas no tienen ningún orden, y el servidor es libre de devolverlas en cualquier orden arbitrario cada vez que haces un "SELECT". Para garantizar un orden, hay que añadir una cláusula "order by" en la sentencia. Así pues, ¿qué order by pondrias en tu consulta para que tenga sentido hablar de la "ROW 1", "ROW 2", etc.?

    Si el orden da igual (o te vale cualquier orden que el servidor devuelva arbitrariamente), entonces puedes recurrir al truco de añadir provisionalmente una columna de tipo Identity, copiar el valor a la columna NUMERO, y luego borrar la columna identity. Más o menos como en este ejemplo:

    create table test
    (
    	numero int null,
    	descr varchar(20) null
    )
    
    insert test(descr) values ('one'), ('two'), ('three'), ('four')
    
    select * from test
    
    alter table test add temporal int identity(58000, 1)
    update test set numero=temporal
    alter table test drop column temporal
    
    select * from test

    miércoles, 15 de mayo de 2019 9:14

Todas las respuestas

  • Un momento, esto requiere aclarar un dato: ¿Qué quiere decir "la ROW 1", "la ROW 2", etc.? Recuerda que en un servidor de base de datos relacional las filas no tienen ningún orden, y el servidor es libre de devolverlas en cualquier orden arbitrario cada vez que haces un "SELECT". Para garantizar un orden, hay que añadir una cláusula "order by" en la sentencia. Así pues, ¿qué order by pondrias en tu consulta para que tenga sentido hablar de la "ROW 1", "ROW 2", etc.?

    Si el orden da igual (o te vale cualquier orden que el servidor devuelva arbitrariamente), entonces puedes recurrir al truco de añadir provisionalmente una columna de tipo Identity, copiar el valor a la columna NUMERO, y luego borrar la columna identity. Más o menos como en este ejemplo:

    create table test
    (
    	numero int null,
    	descr varchar(20) null
    )
    
    insert test(descr) values ('one'), ('two'), ('three'), ('four')
    
    select * from test
    
    alter table test add temporal int identity(58000, 1)
    update test set numero=temporal
    alter table test drop column temporal
    
    select * from test

    miércoles, 15 de mayo de 2019 9:14
  • Deleted
    jueves, 16 de mayo de 2019 23:17