Assurer un numéro de séquence sans trou
Hello,
Au hasard du net, je suis tombé sur un code qui m'a l'air plutôt élégant pour s'assurer d'avoir une suite continue de numéro sans devoir s'emmerder à gérer les trous et sans devoir passer le niveau d'isolation des transactions sur serializable.
Voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| while 1=1
begin
declare @new_nr int
select @new_nr = max(InvoiceNr) + 1
from dbo.Invoices
if @new_nr is null
set @new_nr = 1
insert dbo.Invoices
(InvoiceNr, ...)
values (@new_nr, ...)
if @@rowcount = 1
break
end |
Où Invoices serait une table dans ce goût-là :
Code:
1 2 3 4 5 6 7 8
| CREATE TABLE [Imports].[Invoices_Numbers]
(
[InvoiceNumber] [INT] IDENTITY(1, 1) NOT NULL
,[Deleted] [BIT] NOT NULL
,[Used] [BIT] NOT NULL,
CONSTRAINT [PK_Invoices_Numbers] PRIMARY KEY CLUSTERED ( [InvoiceNumber] ASC )
)
ON [PRIMARY] |
Qu'en pensez-vous ?