Principales respuestas
Numeros Correlativos C# y SQL

Pregunta
-
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
- Propuesto como respuesta Jorge TurradoMVP miércoles, 22 de agosto de 2018 12:12
- Marcado como respuesta Pablo RubioModerator lunes, 27 de agosto de 2018 15:48
-
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- Marcado como respuesta Pablo RubioModerator miércoles, 22 de agosto de 2018 14:57
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
- Propuesto como respuesta Jorge TurradoMVP miércoles, 22 de agosto de 2018 12:12
- Marcado como respuesta Pablo RubioModerator lunes, 27 de agosto de 2018 15:48
-
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- Marcado como respuesta Pablo RubioModerator miércoles, 22 de agosto de 2018 14:57