Ben 1 başlayan ve 1 ile artış benzersiz satınalma siparişi sayıları oluşturmak çalışıyorum. Bu komut dosyası kullanılarak oluşturulan bir PONumber tablo var:
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)
);
Ve bu komut dosyası kullanılarak oluşturulan saklı yordam:
CREATE PROCEDURE [dbo].[GetPONumber]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[PONumbers]([NewPONo]) VALUES(1);
SELECT SCOPE_IDENTITY() AS PONumber;
END
Yaratılış zamanında, bu iyi çalışıyor. Saklı yordam çalıştırıldığında, istenen sayıdan başlar ve 1 artar.
Garip olan şey, bilgisayarımı kapatır veya hazırda bekletirsem, işlem bir dahaki sefer çalıştığında, dizinin neredeyse 1000 oranında ilerlemesidir.
Aşağıdaki sonuçları görün:
Rakamın 8'den 1002'ye atladığını görebilirsiniz!
- Bu neden oluyor?
- Sayıların bu şekilde atlanmamasını nasıl sağlarım?
- İhtiyacım olan tek şey SQL sayıları oluşturmak için:
- a) Benzersiz garantili.
- b) istenen miktarda artırılır.
SQL uzmanı olmadığımı itiraf ediyorum. SCOPE_IDENTITY () işlevinin ne yaptığını yanlış anlıyor muyum? Farklı bir yaklaşım mı kullanmalıyım? SQL 2012 ve sonraki sürümlerde dizilere baktım, ancak Microsoft varsayılan olarak benzersiz olmalarının garanti edilmediğini söylüyor.