Я пытаюсь сгенерировать уникальные номера заказов на покупку, которые начинаются с 1 и увеличиваются на 1. У меня есть таблица PONumber, созданная с помощью этого сценария:
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)
);
И хранимая процедура, созданная с помощью этого скрипта:
CREATE PROCEDURE [dbo].[GetPONumber]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[PONumbers]([NewPONo]) VALUES(1);
SELECT SCOPE_IDENTITY() AS PONumber;
END
На момент создания это работает нормально. Когда хранимая процедура запускается, она начинается с нужного номера и увеличивается на 1.
Странно то, что если я выключаю или переводю компьютер в спящий режим, то при следующем запуске процедуры последовательность увеличивается почти на 1000.
Смотрите результаты ниже:
Вы можете видеть, что число подскочило с 8 до 1002!
- Почему это происходит?
- Как я могу убедиться, что номера не пропускаются так?
- Все, что мне нужно, это чтобы SQL генерировал числа, которые:
- а) Гарантированно уникален.
- б) увеличение на желаемую величину.
Я признаю, что я не эксперт по SQL. Я неправильно понимаю, что делает SCOPE_IDENTITY ()? Должен ли я использовать другой подход? Я рассмотрел последовательности в SQL 2012+, но Microsoft говорит, что они не гарантированно будут уникальными по умолчанию.
источник
Это проблема SQL Server. Все, что вы можете сделать, это повторно заполнить колонку.
удалить записи с неправильным идентификатором столбца. Переустановите идентичность столбца. И тогда следующая запись имеет правильный идентификатор.
Восстановите идентичность, используя следующую команду sql:
DBCC CHECKIDENT ('YOUR_TABLE_NAME', RESEED, 9)
- 9 - последний правильный идентификатористочник