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이 다음과 같은 숫자를 생성하는 것입니다.
- a) 유일한 보장.
- b) 원하는 양만큼 증가시킵니다.
저는 SQL 전문가가 아니라는 것을 인정합니다. SCOPE_IDENTITY ()의 기능을 이해하지 못합니까? 다른 접근 방식을 사용해야합니까? SQL 2012+에서 시퀀스를 살펴 보았지만 Microsoft는 기본적으로 고유하지 않을 것이라고 말합니다.