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