sql >> Databasteknik >  >> RDS >> Sqlserver

Hantering av max(ID) i en samtidig miljö

Här är två sätt att göra vad du vill. Det faktum att du kan sluta med en unik begränsningsöverträdelse på EmpCode Jag låter dig oroa dig för :).

1. Använd scope_identity() för att få det senast infogade ID:t och använda det för att beräkna EmpCode .

Tabelldefinition:

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
)

Lägg till en rad till Anställda. Bör göras i en transaktion för att vara säker på att du inte kommer att lämnas med standardvärdet för slumpmässigt värde från 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. Gör EmpCode en datorkolumn .

Tabelldefinition:

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
)

Lägg till en rad till Anställda:

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


  1. Vad är kardinalitet i MySQL?

  2. Kör för närvarande en fråga i en lagrad procedur

  3. mysql SORTERA EFTER antal unika ordmatchningar

  4. Konfigurera Django med MS SQL Server-databas