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')