Tôi đang cố gắng tạo số thứ tự mua hàng duy nhất bắt đầu từ 1 và tăng thêm 1. Tôi có một bảng PONumber được tạo bằng tập lệnh này:
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)
);
Và một thủ tục được lưu trữ được tạo bằng tập lệnh này:
CREATE PROCEDURE [dbo].[GetPONumber]
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[PONumbers]([NewPONo]) VALUES(1);
SELECT SCOPE_IDENTITY() AS PONumber;
END
Tại thời điểm tạo ra, điều này hoạt động tốt. Khi thủ tục được lưu trữ chạy, nó bắt đầu ở số mong muốn và tăng thêm 1.
Điều kỳ lạ là, nếu tôi tắt hoặc ngủ đông máy tính của mình, thì lần tiếp theo thủ tục chạy, trình tự đã tiến gần 1000.
Xem kết quả dưới đây:
Bạn có thể thấy rằng con số đã nhảy từ 8 đến 1002!
- Tại sao chuyện này đang xảy ra?
- Làm thế nào để tôi đảm bảo rằng những con số không bị bỏ qua như vậy?
- Tất cả những gì tôi cần là cho SQL tạo ra các số đó là:
- a) Đảm bảo duy nhất.
- b) tăng theo số lượng mong muốn.
Tôi thừa nhận tôi không phải là một chuyên gia SQL. Tôi có hiểu nhầm những gì SCOPE_IDENTITY () không? Tôi có nên sử dụng một cách tiếp cận khác? Tôi đã xem xét các trình tự trong SQL 2012+, nhưng Microsoft nói rằng chúng không được đảm bảo là duy nhất theo mặc định.