"इनसाइड Microsoft SQL Server 2008:T-SQL Querying"
. से इस समस्या का समाधानCREATE TABLE dbo.Sequence(
val int IDENTITY (10000, 1) /*Seed this at whatever your current max value is*/
)
GO
CREATE PROC dbo.GetSequence
@val AS int OUTPUT
AS
BEGIN TRAN
SAVE TRAN S1
INSERT INTO dbo.Sequence DEFAULT VALUES
SET @val=SCOPE_IDENTITY()
ROLLBACK TRAN S1 /*Rolls back just as far as the save point to prevent the
sequence table filling up. The id allocated won't be reused*/
COMMIT TRAN
या उसी पुस्तक से एक और विकल्प जो आसानी से श्रेणियों को आवंटित करता है। (आपको यह विचार करना होगा कि इसे अपने लेनदेन के अंदर या बाहर से कॉल करना है या नहीं - अंदर अन्य समवर्ती लेनदेन को तब तक अवरुद्ध कर देगा जब तक कि पहला लेनदेन न हो)
CREATE TABLE dbo.Sequence2(
val int
)
GO
INSERT INTO dbo.Sequence2 VALUES(10000);
GO
CREATE PROC dbo.GetSequence2
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence2
SET @val = val = val + @n;
SET @val = @val - @n + 1;