在SQL Server 2008中沒有sequence對象,但是,這並不意味着你不能模仿一個,包括一個序列對象的所有選項,除了兌現。 但是,您必須考慮到序列中可能存在空白(即1,2,5,6,8 ...)的事實)
要做到這一點,您可以通過與單個列創建表開始,被指定爲identity:
CREATE TABLE tblSequence
(
Number int identity(1, 1)
)
然後,創建一個存儲過程,將讓你的下一個數字:
CREATE PROCEDURE stp_NextSequenceNumber
(
@NextNumber int output
)
AS
BEGIN
INSERT INTO tblSequence DEFAULT VALUES
SELECT @NextNumber = SCOPE_IDENTITY()
END
GO
現在你需要做的就是下一個數字就是簡單地執行存儲過程:
DECLARE @NextNumber int
EXEC stp_NextSequenceNumber @NextNumber output
也有可能進一步發展這一過程來處理使用truncate table
序列的回收,將從表中刪除所有值,並重新標識列到它的種子:
CREATE PROCEDURE stp_NextSequenceNumber
(
@NextNumber int output
)
AS
BEGIN
DECLARE @CurrentNumber int
SELECT @CurrentNumber = MAX(Number)
FROM tblSequence
IF @CurrentNumber >= 10 -- In this example, 10 is the max value of the sequence
TRUNCATE TABLE tblSequence
INSERT INTO tblSequence DEFAULT VALUES
SELECT @NextNumber = SCOPE_IDENTITY()
END
GO
http://stackoverflow.com/問題/ 18598535/avoid-concurrent-insert-multiple-same-id-in-mysql – Rumpelstinsk
你也可以在列上定義一個唯一的索引 – Rumpelstinsk
@Rumpelstinsk:我想使用一種總是生成正確計數器的機制。 – Masoud