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

Håndtering af max(ID) i et samtidig miljø

Her er to måder at gøre, hvad du vil. Det faktum, at du kan ende med en unik overtrædelse af begrænsninger på EmpCode Jeg vil lade dig bekymre dig om :).

1. Brug scope_identity() for at få det sidst indsatte ID og bruge det til at beregne EmpCode .

Tabeldefinition:

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
)

Tilføj en række til Medarbejdere. Bør udføres i en transaktion for at være sikker på, at du ikke vil stå tilbage med standard tilfældig værdi fra left(newid(), 10) i 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. Lav EmpCode en beregnet kolonne .

Tabeldefinition:

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
)

Tilføj en række til medarbejdere:

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


  1. Flere SET-felter ved hjælp af LOAD DATA INFILE til datoformat

  2. Hvordan får jeg gem-installationen til at fungere på OS X Lion med Ruby 1.8.7 uden at fejle?

  3. Bestil efter faldende dato - måned, dag og år

  4. SQL joining spørgsmål