sql >> Database >  >> RDS >> Sqlserver

Max(ID) verwerken in een gelijktijdige omgeving

Hier zijn twee manieren om te doen wat je wilt. Het feit dat u zou kunnen eindigen met een unieke beperkingsschending op EmpCode Ik laat je zorgen over :).

1. Gebruik scope_identity() om de laatst ingevoerde ID te krijgen en die te gebruiken om EmpCode te berekenen .

Tabeldefinitie:

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
)

Voeg één rij toe aan Werknemers. Moet in een transactie worden gedaan om er zeker van te zijn dat u niet blijft zitten met de standaard willekeurige waarde van 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. Maak EmpCode een berekende kolom .

Tabeldefinitie:

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
)

Voeg één rij toe aan Werknemers:

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


  1. org.hibernate.TransactionException ophalen:geneste transacties niet ondersteund fout bij verwijderen

  2. hoe datum en tijd te vergelijken in php/mysql

  3. RUIMTELIJKE gegevens migreren van Oracle naar Postgresql

  4. Custom ORDER BY om 'de' te negeren