J'essaie de générer des numéros de bons de commande uniques qui commencent à 1 et incrémentent par 1. J'ai une table PONumber créée à l'aide de ce 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)
);
Et une procédure stockée créée à l'aide de ce script:
CREATE PROCEDURE [dbo].[GetPONumber]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[PONumbers]([NewPONo]) VALUES(1);
SELECT SCOPE_IDENTITY() AS PONumber;
END
Au moment de la création, cela fonctionne bien. Lorsque la procédure stockée s'exécute, elle démarre au nombre souhaité et incrémente de 1.
Ce qui est étrange, c'est que si j'arrête ou met en veille prolongée mon ordinateur, la prochaine fois que la procédure s'exécute, la séquence avance de près de 1000.
Voir les résultats ci-dessous:
Vous pouvez voir que le nombre est passé de 8 à 1002!
- Pourquoi cela arrive-t-il?
- Comment puis-je m'assurer que les chiffres ne sont pas sautés comme ça?
- Tout ce dont j'ai besoin, c'est que SQL génère des nombres qui sont:
- a) Garantie unique.
- b) incrémenter du montant souhaité.
J'avoue que je ne suis pas un expert SQL. Dois-je mal comprendre ce que fait SCOPE_IDENTITY ()? Dois-je utiliser une approche différente? J'ai examiné les séquences dans SQL 2012+, mais Microsoft dit qu'elles ne sont pas garanties d'être uniques par défaut.
la source
C'est un problème de SQL Server. Tout ce que vous pouvez faire est de réamorcer la colonne.
supprimez les entrées avec un identifiant de colonne incorrect. Réamorcez l'identité de la colonne. Et puis l'entrée suivante a une ID appropriée.
Rétablir l'identité à l'aide de la commande sql suivante:
DBCC CHECKIDENT ('YOUR_TABLE_NAME', RESEED, 9)
- 9 est le dernier ID correctla source