none
Como rellenar columna numérica con valores sucesivos?

    Question

  • Hola, Buenos dias

    Agradecería que me puedan ayudar en lo siguiente; tengo una tabla el la cual primero tenia dos columnas y ahora he agregado una columna mas (después de cargar los registros) de tipo numérica, la idea es insertar a esta columna los números en forma correlativa para después hacer la columna como autonumerico.

    me imagino que debe ser un unsert y este debe ir sumando +1 a medida que vaya insertando el registro o update cambiar el null por el numero

    saludos


    Mauricio Hernández A.


    • Edited by mauriciohz Monday, November 26, 2012 2:30 PM falta info...
    Monday, November 26, 2012 2:29 PM

Answers

  • Aunque puede hacerse fácilmente con row_number(), ¿por qué no mejor usar una columna tipo IDENTITY?  Sería algo así:

    Alter tabla
    Drop Column Id;
    Go
    
    Alter tabla
    Add ID int Not Null Identity(1, 1);
    Go
    

    La columna ID se llenará automáticamente según el orden actual de la tabla.  Luego puede hacer de esta columna la clave primaria si eso es a lo que apunta.


    Jose R. MCP
    Code Samples

    • Marked as answer by mauriciohz Monday, November 26, 2012 2:58 PM
    Monday, November 26, 2012 2:37 PM
  • Hola,

    Implemente la solución que propones y resulto bien!

    de esta manera:

    --TABLA 
    CREATE TABLE #MyTabla
    (
    Nombre NVARCHAR(50),
    Codigo NVARCHAR(4)
    )
    --DATOS
    INSERT INTO #MyTabla VALUES('ALFA','2008')
    INSERT INTO #MyTabla VALUES('ALFA','2000')
    INSERT INTO #MyTabla VALUES('BETA','5002')
    INSERT INTO #MyTabla VALUES('GAMA','5800')
    INSERT INTO #MyTabla VALUES('BETA','6200')
    
    --CREO COLUMNA CON VALORES NULL
    ALTER TABLE #MyTabla
    Add ID int;
    Go
    --VERIFICO
    SELECT* FROM #MyTabla
    ---------------------------------------------
    --ELIMINO COLUMNA
    ALTER TABLE #MyTabla
    DROP COLUMN ID;
    GO
    --INSERTO NUEVA COLUMNA CON IDENTITYS 
    ALTER TABLE #MyTabla
    Add ID int Not Null Identity(1, 1);
    Go
    --VERIFICO
    SELECT* FROM #MyTabla

    Gracias 

    Saludos


    Mauricio Hernández A.

    • Marked as answer by mauriciohz Monday, November 26, 2012 2:58 PM
    Monday, November 26, 2012 2:57 PM

All replies

  • Aunque puede hacerse fácilmente con row_number(), ¿por qué no mejor usar una columna tipo IDENTITY?  Sería algo así:

    Alter tabla
    Drop Column Id;
    Go
    
    Alter tabla
    Add ID int Not Null Identity(1, 1);
    Go
    

    La columna ID se llenará automáticamente según el orden actual de la tabla.  Luego puede hacer de esta columna la clave primaria si eso es a lo que apunta.


    Jose R. MCP
    Code Samples

    • Marked as answer by mauriciohz Monday, November 26, 2012 2:58 PM
    Monday, November 26, 2012 2:37 PM
  • Hola que tal Mauricio...

    solo tendrías que actualizar tu campo utilizando UPDATE y ROW_NUMBER()

    update t1
    set t1.id = t2.rn
    from tuTabla t1
    inner join ( 
    	select *,ROW_NUMBER() over( order by campoParaOrdenar ) as rn
    	 from tuTabla
     ) as t2 
     on t1.tucampoPrimaryKey = t2.tucampoPrimaryKey 

    o si lo piensas hacer con un insert es similar:

    INSERT INTO tuNuevaTabla
    select ROW_NUMBER() over( order by campoParaOrdenar ) as rn,*
    from tuTabla

    Cuéntanos como te va...

    SALUDOS!


    Sergio Sánchez Arias

    Monday, November 26, 2012 2:41 PM
  • Hola,

    Implemente la solución que propones y resulto bien!

    de esta manera:

    --TABLA 
    CREATE TABLE #MyTabla
    (
    Nombre NVARCHAR(50),
    Codigo NVARCHAR(4)
    )
    --DATOS
    INSERT INTO #MyTabla VALUES('ALFA','2008')
    INSERT INTO #MyTabla VALUES('ALFA','2000')
    INSERT INTO #MyTabla VALUES('BETA','5002')
    INSERT INTO #MyTabla VALUES('GAMA','5800')
    INSERT INTO #MyTabla VALUES('BETA','6200')
    
    --CREO COLUMNA CON VALORES NULL
    ALTER TABLE #MyTabla
    Add ID int;
    Go
    --VERIFICO
    SELECT* FROM #MyTabla
    ---------------------------------------------
    --ELIMINO COLUMNA
    ALTER TABLE #MyTabla
    DROP COLUMN ID;
    GO
    --INSERTO NUEVA COLUMNA CON IDENTITYS 
    ALTER TABLE #MyTabla
    Add ID int Not Null Identity(1, 1);
    Go
    --VERIFICO
    SELECT* FROM #MyTabla

    Gracias 

    Saludos


    Mauricio Hernández A.

    • Marked as answer by mauriciohz Monday, November 26, 2012 2:58 PM
    Monday, November 26, 2012 2:57 PM
  • Hola Sergio,

    estuve revisando tu propuesta de solución y no puede hacer calzar la columna sobre todo en 'campoParaOrdenar'

    de todas maneras dejo el código (para tener otra alternativa de solución) en la cual necesito la consulta;

    --TABLA 
    CREATE TABLE #MyTabla
    (
    Nombre NVARCHAR(50),
    Codigo NVARCHAR(4)
    )
    --DATOS
    INSERT INTO #MyTabla VALUES('ALFA','2008')
    INSERT INTO #MyTabla VALUES('ALFA','2000')
    INSERT INTO #MyTabla VALUES('BETA','5002')
    INSERT INTO #MyTabla VALUES('GAMA','5800')
    INSERT INTO #MyTabla VALUES('BETA','6200')
    
    ALTER TABLE #MyTabla
    Add ID int;
    Go
    Saludos


    Mauricio Hernández A.

    Monday, November 26, 2012 3:14 PM