开发者

Read and Increment int value in SQL Server

I need to read and increment a value atomically in SQL Server 2008, using c#.

For example, I have t开发者_Go百科o insert items of a "lot", for this i need the number of the last lot and be sure, that no one else get this number.

So i have a table only with the last lot number, and find a way to get and update the number in only one step.

How can i do this?


Is it essential that the lot numbers be sequential? Why not just use an identity? This is better in terms of concurrency as otherwise you need to block concurrent insert attempts in case they get rolled back and would leave a gap in the sequence.

If it absolutely is a requirement however you can do

CREATE TABLE dbo.Sequence 
  (
     OneRow CHAR(1) DEFAULT('X') PRIMARY KEY CHECK(OneRow = 'X'),
     val    INT
  )  

Insert a row with an initial seed.

INSERT INTO dbo.Sequence 
            (val)
VALUES     (1)  

Then to allocate a range of sufficient size for your insert (call it in the same transaction obviously)

CREATE PROC dbo.GetSequence
@val AS int OUTPUT,
@n as int =1
AS
UPDATE dbo.Sequence 
SET @val = val = (val + @n);


The easiest way would be to just alter the table so that the lot number is an identity field and will auto-increment itself. Then you don't have to worry about incrementing in code.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜