ฉันพยายามสร้างหมายเลขใบสั่งซื้อที่ไม่ซ้ำกันซึ่งเริ่มต้นที่ 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
สิ่งที่แปลกคือถ้าฉันปิดหรือไฮเบอร์เนตคอมพิวเตอร์ของฉันในครั้งต่อไปที่โพรซีเดอร์รันลำดับนั้นจะสูงขึ้นเกือบ 1,000
ดูผลลัพธ์ด้านล่าง:
คุณจะเห็นว่าจำนวนนั้นเพิ่มขึ้นจาก 8 เป็น 1002!
- ทำไมสิ่งนี้จึงเกิดขึ้น
- ฉันจะแน่ใจได้อย่างไรว่าตัวเลขจะไม่ถูกข้ามเช่นนั้น
- ทั้งหมดที่ฉันต้องการสำหรับ SQL เพื่อสร้างตัวเลขที่:
- a) รับประกันความแปลกใหม่
- b) เพิ่มขึ้นตามจำนวนที่ต้องการ
ฉันยอมรับว่าฉันไม่ใช่ผู้เชี่ยวชาญ SQL ฉันเข้าใจผิดว่า SCOPE_IDENTITY () ทำอะไร ฉันควรใช้วิธีการอื่นหรือไม่? ฉันค้นหาลำดับใน SQL 2012+ แต่ Microsoft แจ้งว่าไม่รับประกันว่าจะไม่ซ้ำกันตามค่าเริ่มต้น