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はデフォルトでシーケンスが一意であるとは限らないと言っています。