Estoy tratando de generar números de pedido de compra únicos que comienzan en 1 y se incrementan en 1. Tengo una tabla PONumber creada con este script:
CREATE TABLE [dbo].[PONumbers]
(
[PONumberPK] [int] IDENTITY(1,1) NOT NULL,
[NewPONo] [bit] NOT NULL,
[DateInserted] [datetime] NOT NULL DEFAULT GETDATE(),
CONSTRAINT [PONumbersPK] PRIMARY KEY CLUSTERED ([PONumberPK] ASC)
);
Y un procedimiento almacenado creado con este script:
CREATE PROCEDURE [dbo].[GetPONumber]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[PONumbers]([NewPONo]) VALUES(1);
SELECT SCOPE_IDENTITY() AS PONumber;
END
En el momento de la creación, esto funciona bien. Cuando se ejecuta el procedimiento almacenado, comienza en el número deseado y se incrementa en 1.
Lo extraño es que, si apago o hiberno mi computadora, la próxima vez que se ejecute el procedimiento, la secuencia ha avanzado en casi 1000.
Vea los resultados a continuación:
¡Puedes ver que el número saltó de 8 a 1002!
- ¿Por qué está pasando esto?
- ¿Cómo me aseguro de que los números no se salten así?
- Todo lo que necesito es que SQL genere números que son:
- a) Garantizado único.
- b) incrementar en la cantidad deseada.
Admito que no soy un experto en SQL. ¿No entiendo lo que hace SCOPE_IDENTITY ()? ¿Debería estar usando un enfoque diferente? Investigué las secuencias en SQL 2012+, pero Microsoft dice que no se garantiza que sean únicas por defecto.
fuente
Este es un problema de SQL Server. Todo lo que puedes hacer es reiniciar la columna.
elimine las entradas con el ID de columna incorrecto. Restablecer la identidad de la columna. Y luego la siguiente entrada tiene la identificación adecuada.
Restablecer identidad usando el siguiente comando sql:
DBCC CHECKIDENT ('YOUR_TABLE_NAME', RESEED, 9)
- 9 es la última identificación correctafuente