none
Numeros Correlativos C# y SQL RRS feed

  • Pregunta

  • Como puedo crear numeros correlativos(001,002,003,004..) en c# y sql con procedimiento almacenado. Quiero mostrar el numero correlativo en mi formulario en un textbox y cada vez que de click incremente en uno. Necesito ayuda. Gracias
    miércoles, 22 de agosto de 2018 2:52

Respuestas

  • Hola Enrique97:

    Es una buena pregunta que genera buenos debates y gran controversia.

    Esta puede ser una manera.

    create table maximoCorrelativo (id int)
    go
    insert into maximoCorrelativo(id) values (0);
    go
    
    create PROCEDURE [dbo].[SP_MAX_M]
    (
    	@ID INT OUTPUT
    )
    AS
    
    	BEGIN TRANSACTION
    
    	SET @ID = (SELECT ISNULL(MAX(ID),0) + 1 FROM maximoCorrelativo);
    
    	UPDATE maximoCorrelativo SET ID = @ID;
    
    	COMMIT TRANSACTION
    
    RETURN
    GO
    DECLARE @PKEY INT;
    	EXEC  [dbo].[SP_MAX_M] @PKEY OUTPUT;
    	SELECT @PKEY
    

    Lo que te devuelve la ejecución del procedimiento almacenado sp_max_m, es siempre uno más.

    No garantiza la consecutividad de los registros, porque desde que te devuelve el máximo si la transacción es cancelada, el siguiente que lo pida, le devolverá uno más. Por tanto puede ocurrirte que te de 1, 2, 3, 4 ….y mientras se cancela el registro......5....pero el 4 se ve eliminado. (eso solo depende de tu lógica de negocio).

    Pero te vale para que no te devuelve dos veces el mismo.

    Espero te ayude, y puedes comentar lo que te parezca.

    Un saludo

    miércoles, 22 de agosto de 2018 11:18
  • hola

    Estas pensando de forma incorrecta, en la db no se pone el formato numerico, los ceros delante del numeros estan de mas

    lo que tienes que comseguir es la secuencia, el formato con ceros delante solo lo pones cuando vayas a mostras el valor en pantalla

    la secuencia la puedes realizar con un campk del tipo IDENTITY, o sino usando

    SELECT MAX(campo) WHERE Tabla

    a ese valor por supuesto le sumas uno para tenr el siguiente

    pero remarco en la db solo el valor 1, 2, 3, y nada mas, los ceros delante lo agtregas al mostrar el valor usando

    textbox1.Text = string.Format("{0:000}", numero);

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 22 de agosto de 2018 14:33

Todas las respuestas

  • Hola Enrique97:

    Es una buena pregunta que genera buenos debates y gran controversia.

    Esta puede ser una manera.

    create table maximoCorrelativo (id int)
    go
    insert into maximoCorrelativo(id) values (0);
    go
    
    create PROCEDURE [dbo].[SP_MAX_M]
    (
    	@ID INT OUTPUT
    )
    AS
    
    	BEGIN TRANSACTION
    
    	SET @ID = (SELECT ISNULL(MAX(ID),0) + 1 FROM maximoCorrelativo);
    
    	UPDATE maximoCorrelativo SET ID = @ID;
    
    	COMMIT TRANSACTION
    
    RETURN
    GO
    DECLARE @PKEY INT;
    	EXEC  [dbo].[SP_MAX_M] @PKEY OUTPUT;
    	SELECT @PKEY
    

    Lo que te devuelve la ejecución del procedimiento almacenado sp_max_m, es siempre uno más.

    No garantiza la consecutividad de los registros, porque desde que te devuelve el máximo si la transacción es cancelada, el siguiente que lo pida, le devolverá uno más. Por tanto puede ocurrirte que te de 1, 2, 3, 4 ….y mientras se cancela el registro......5....pero el 4 se ve eliminado. (eso solo depende de tu lógica de negocio).

    Pero te vale para que no te devuelve dos veces el mismo.

    Espero te ayude, y puedes comentar lo que te parezca.

    Un saludo

    miércoles, 22 de agosto de 2018 11:18
  • hola

    Estas pensando de forma incorrecta, en la db no se pone el formato numerico, los ceros delante del numeros estan de mas

    lo que tienes que comseguir es la secuencia, el formato con ceros delante solo lo pones cuando vayas a mostras el valor en pantalla

    la secuencia la puedes realizar con un campk del tipo IDENTITY, o sino usando

    SELECT MAX(campo) WHERE Tabla

    a ese valor por supuesto le sumas uno para tenr el siguiente

    pero remarco en la db solo el valor 1, 2, 3, y nada mas, los ceros delante lo agtregas al mostrar el valor usando

    textbox1.Text = string.Format("{0:000}", numero);

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 22 de agosto de 2018 14:33