Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Gestione di max(ID) in un ambiente simultaneo

Ecco due modi per fare quello che vuoi. Il fatto che potresti finire con una violazione del vincolo univoco su EmpCode Lascio a te la preoccupazione :).

1. Usa scope_identity() per ottenere l'ultimo ID inserito e utilizzarlo per calcolare EmpCode .

Definizione della tabella:

create table Employees
(
  ID int identity primary key,
  Created datetime not null default getdate(),
  DistrictCode char(2) not null,
  EmpCode char(10) not null default left(newid(), 10) unique
)

Aggiungi una riga a Dipendenti. Dovrebbe essere eseguito in una transazione per essere sicuro di non rimanere con il valore casuale predefinito da left(newid(), 10) in EmpCode :

declare @ID int

insert into Employees (DistrictCode) values ('AB')

set @ID = scope_identity()

update Employees
set EmpCode = cast(year(Created) as char(4))+DistrictCode+right([email protected], 4)
where ID = @ID 

2. Crea EmpCode una colonna calcolata .

Definizione della tabella:

create table Employees
(
  ID int identity primary key,
  Created datetime not null default getdate(),
  DistrictCode char(2) not null,
  EmpCode as cast(year(Created) as char(4))+DistrictCode+right(10000+ID, 4) unique
)

Aggiungi una riga a Dipendenti:

insert into Employees (DistrictCode) values ('AB')