Sto provando a generare numeri di ordine di acquisto univoci che iniziano da 1 e aumentano di 1. Ho una tabella PONumber creata usando questo 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)
);
E una procedura memorizzata creata usando questo script:
CREATE PROCEDURE [dbo].[GetPONumber]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[PONumbers]([NewPONo]) VALUES(1);
SELECT SCOPE_IDENTITY() AS PONumber;
END
Al momento della creazione, funziona perfettamente. Quando viene eseguita la procedura memorizzata, inizia con il numero desiderato e aumenta di 1.
La cosa strana è che, se spengo o iberno il mio computer, la prossima volta che la procedura viene eseguita, la sequenza è avanzata di quasi 1000.
Vedi i risultati qui sotto:
Puoi vedere che il numero è passato da 8 a 1002!
- Perché sta succedendo?
- Come posso garantire che i numeri non vengano saltati in quel modo?
- Tutto ciò di cui ho bisogno è che SQL generi numeri che sono:
- a) Unico garantito.
- b) incremento della quantità desiderata.
Ammetto di non essere un esperto di SQL. Posso fraintendere cosa fa SCOPE_IDENTITY ()? Dovrei usare un approccio diverso? Ho esaminato le sequenze in SQL 2012+, ma Microsoft afferma che non sono garantite per essere uniche per impostazione predefinita.