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.