Voici deux façons de faire ce que vous voulez. Le fait que vous pourriez vous retrouver avec une violation de contrainte unique sur EmpCode
Je vous laisse vous inquiéter :).
1. Utilisez scope_identity()
pour obtenir le dernier ID inséré et l'utiliser pour calculer EmpCode
.
Définition du tableau :
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
)
Ajoutez une ligne à Employés. Doit être fait dans une transaction pour être sûr que vous ne vous retrouverez pas avec la valeur aléatoire par défaut de left(newid(), 10)
dans 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. Faire EmpCode
une colonne calculée
.
Définition du tableau :
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
)
Ajoutez une ligne à Employés :
insert into Employees (DistrictCode) values ('AB')