Các số lô có phải là thứ tự không? Tại sao không chỉ sử dụng identity
? Điều này tốt hơn về mặt đồng thời vì nếu không, bạn cần chặn các nỗ lực chèn đồng thời trong trường hợp chúng bị lùi lại và sẽ để lại khoảng trống trong trình tự.
Nếu nó hoàn toàn là một yêu cầu, tuy nhiên bạn có thể làm
CREATE TABLE dbo.Sequence
(
OneRow CHAR(1) DEFAULT('X') PRIMARY KEY CHECK(OneRow = 'X'),
val INT
)
Chèn một hàng với một hạt giống ban đầu.
INSERT INTO dbo.Sequence
(val)
VALUES (1)
Sau đó, để phân bổ một phạm vi đủ kích thước cho phụ trang của bạn (rõ ràng là gọi nó trong cùng một giao dịch)
CREATE PROC dbo.GetSequence
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence
SET @val = val = (val + @n);