none
Cómo actualizar consecutivo en BD, RRS feed

  • Pregunta

  • Hola amigos del foro: estoy usando sql express 2008. Tengo una tabla donde tengo un grupo de vendedores que ingreso o elimino de la tabla según sea el caso. Esta tabla tiene la columna Consec para conservar el orden consecutivo de los registros. Pregunta: Desde un procedimiento almacenado, ¿cómo hago para al ordenar esta tabla por apellido, nombre y actualizar la columna Consec del 1 al último registro?

    Esto lo hago desde el programa, pero quiero que quede como procedimiento almacenado.

    Gracias

    martes, 8 de enero de 2013 1:53

Respuestas

  • Sinceramente no veo la razón de ser para hacer algo así.  ¿Por qué no simplemente declara este campo consecutivo como IDENTITY?

    Estrictamente hablando y únicamente para satisfacer su pregunta (aunque para nada recomiendo esto):

    Create Procedure spHacerAlgoInnecesario
    As
    Begin
    
    Set NoCount On;
    
    With t As
    (
        Select
            clavePrimaria
            , Row_Number() Over (Order By Apellido, Nombre) As [rid]
        From
            tabla
    )
    Update tabla
    Set Consec = rid
    From
        t
        Inner Join
        tabla As s
        On t.clavePrimaria = s.clavePrimaria
    ;
    
    return @@Error;
    End
    

    Pero le repito que no le veo razón de ser.  La clave primaria puede ser el mismo campo de Consec, creo yo.  No estoy seguro al 100%.  Tendrá que probarlo a ver si sirve o no.


    Jose R. MCP
    Code Samples

    • Propuesto como respuesta Sergio S Arias martes, 8 de enero de 2013 20:08
    • Marcado como respuesta Ricardo Russo miércoles, 16 de enero de 2013 17:47
    martes, 8 de enero de 2013 3:30

Todas las respuestas

  • Sinceramente no veo la razón de ser para hacer algo así.  ¿Por qué no simplemente declara este campo consecutivo como IDENTITY?

    Estrictamente hablando y únicamente para satisfacer su pregunta (aunque para nada recomiendo esto):

    Create Procedure spHacerAlgoInnecesario
    As
    Begin
    
    Set NoCount On;
    
    With t As
    (
        Select
            clavePrimaria
            , Row_Number() Over (Order By Apellido, Nombre) As [rid]
        From
            tabla
    )
    Update tabla
    Set Consec = rid
    From
        t
        Inner Join
        tabla As s
        On t.clavePrimaria = s.clavePrimaria
    ;
    
    return @@Error;
    End
    

    Pero le repito que no le veo razón de ser.  La clave primaria puede ser el mismo campo de Consec, creo yo.  No estoy seguro al 100%.  Tendrá que probarlo a ver si sirve o no.


    Jose R. MCP
    Code Samples

    • Propuesto como respuesta Sergio S Arias martes, 8 de enero de 2013 20:08
    • Marcado como respuesta Ricardo Russo miércoles, 16 de enero de 2013 17:47
    martes, 8 de enero de 2013 3:30
  • Voy a hacer algunas pruebas webjose, luego te hago los comentarios correspondientes. Dame chance hasta mañana. Tengo que agregar que la columna Consec NO la utilizo para llave o índice, es para controlar el orden para ciertos procesos que no es necesario plantear en este momento. La intención es crear un procedimiento almacenado que numere una tabla, que está ordenada por apellidos y nombres, del 1ro al último.

    Gracias por el ejemplo.


    • Editado Carlos Cuenta martes, 8 de enero de 2013 5:22 Más detalles.
    martes, 8 de enero de 2013 4:39