Saya mencoba untuk menghasilkan nomor pesanan pembelian unik yang dimulai dari 1 dan bertambah dengan 1. Saya memiliki tabel PONumber yang dibuat menggunakan skrip ini:
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)
);
Dan prosedur tersimpan yang dibuat menggunakan skrip ini:
CREATE PROCEDURE [dbo].[GetPONumber]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[PONumbers]([NewPONo]) VALUES(1);
SELECT SCOPE_IDENTITY() AS PONumber;
END
Pada saat penciptaan, ini berfungsi dengan baik. Ketika prosedur tersimpan berjalan, itu dimulai pada nomor yang diinginkan dan bertambah 1.
Yang aneh adalah bahwa, jika saya mematikan atau hibernasi komputer saya, maka pada saat prosedur berjalan, urutannya telah meningkat hampir 1000.
Lihat hasil di bawah ini:
Anda dapat melihat bahwa jumlahnya melonjak dari 8 menjadi 1002!
- Mengapa ini terjadi?
- Bagaimana cara memastikan bahwa angka tidak dilewati seperti itu?
- Yang saya butuhkan adalah SQL untuk menghasilkan angka-angka yaitu:
- a) Dijamin unik.
- b) kenaikan dengan jumlah yang diinginkan.
Saya akui saya bukan ahli SQL. Apakah saya salah mengerti apa yang dilakukan SCOPE_IDENTITY ()? Haruskah saya menggunakan pendekatan yang berbeda? Saya melihat ke dalam urutan dalam SQL 2012+, tetapi Microsoft mengatakan bahwa mereka tidak dijamin unik secara default.
sumber
Ini adalah masalah SQL Server. Yang bisa Anda lakukan adalah memasang kembali kolom.
hapus entri dengan id kolom yang salah. Mempelajari kembali identitas kolom. Dan kemudian entri berikutnya memiliki ID yang tepat untuk itu.
Identifikasi ulang menggunakan perintah sql berikut:
DBCC CHECKIDENT ('YOUR_TABLE_NAME', RESEED, 9)
- 9 adalah Id yang benar terakhirsumber