In SQL Server 2008 gibt es keine sequence Objekt, sondern, dass Sie bedeutet nicht, nicht ein nachahmen kann, einschließlich aller Optionen eines Sequenzobjekt, mit Ausnahme kassiert. Sie müssen jedoch berücksichtigen, dass es Lücken in der Sequenz (d. H. 1, 2, 5, 6, 8 ...)
, das zu tun, Sie starten, indem Sie eine Tabelle mit einer einzigen Spalte erstellen, wird das als identity angegeben:
CREATE TABLE tblSequence
(
Number int identity(1, 1)
)
Dann eine gespeicherte Prozedur erstellen, die Ihnen die nächste Nummer erhalten:
CREATE PROCEDURE stp_NextSequenceNumber
(
@NextNumber int output
)
AS
BEGIN
INSERT INTO tblSequence DEFAULT VALUES
SELECT @NextNumber = SCOPE_IDENTITY()
END
GO
alles was Sie jetzt tun müssen, um die nächste Zahl zu erhalten, ist einfach die gespeicherte Prozedur ausführen:
DECLARE @NextNumber int
EXEC stp_NextSequenceNumber @NextNumber output
Es ist auch möglich, weiter, dieses Verfahren zu entwickeln Recycling der Sequenz zu handhaben truncate table
verwenden, die alle Werte aus der Tabelle gelöscht werden und die Identität Spalte zurückgesetzt, um es Saatgut ist:
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/ Fragen/18598535/Vermeidung-Concurrent-Insert-mehrere-same-ID-in-Mysql – Rumpelstinsk
Sie können auch einen eindeutigen Index für die Spalte – Rumpelstinsk
@Rumpelstinsk: Ich möchte einen Mechanismus verwenden, die immer einen richtigen Zähler generieren. – Masoud