none
ingresar consecutivo RRS feed

  • Pregunta

  • Como puedo mediante un insert ingresar un consecutivo, ejemplo tengo una tabla de direcciones y una de clientes, necesito ingresarle dos direcciones a un cliente , la estructura de la tabla es la siguiente:

    Clientes  Consecutivo  Direccion

    Cliente                 1    Dir1

    Cliente                 2    Dir2

     

    miércoles, 24 de noviembre de 2010 17:39

Respuestas

  • Hola.

    ¿Necesitas ordenar y/o numerar registros ya existentes u obtener el siguiente valor a asignar a un nuevo registro que estás insertando?

    Si es lo primero, no es difícil:

     

    select cliente, direccion, consecutivo = row_number() over (partition by cliente order by direccion)
    from direcciones
    where idcliente = @idcliente
    

     

    Si estamos hablando de lo segundo, la cosa es simple, pero para el rendimiento es algo peligroso, ya que estarías garantizándote la presencia de bloqueos. Como ya te han comentado, tendrías que obtener la última dirección de ese cliente y agregarle un valor. Existen muchas alternativas a este tipo de diseños con contadores parciales, a lo mejor sería bueno plantearte ese cambio.

     


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    sábado, 27 de noviembre de 2010 14:44
    Moderador

Todas las respuestas

  • Gracias. Te explico lo que necesito es un consecutivo para las direcciones , por decir algo si un cliente tiene 10 direciones  tenga una secuencia del 1 al 10
    miércoles, 24 de noviembre de 2010 18:51
  • Antes de realizar el insert podrias checar, cual es el id maximo (max(id)) y sumarle 1

    miércoles, 24 de noviembre de 2010 21:42
  • Hola.

    ¿Necesitas ordenar y/o numerar registros ya existentes u obtener el siguiente valor a asignar a un nuevo registro que estás insertando?

    Si es lo primero, no es difícil:

     

    select cliente, direccion, consecutivo = row_number() over (partition by cliente order by direccion)
    from direcciones
    where idcliente = @idcliente
    

     

    Si estamos hablando de lo segundo, la cosa es simple, pero para el rendimiento es algo peligroso, ya que estarías garantizándote la presencia de bloqueos. Como ya te han comentado, tendrías que obtener la última dirección de ese cliente y agregarle un valor. Existen muchas alternativas a este tipo de diseños con contadores parciales, a lo mejor sería bueno plantearte ese cambio.

     


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    sábado, 27 de noviembre de 2010 14:44
    Moderador