Oto dwa sposoby robienia tego, co chcesz. Fakt, że możesz skończyć z naruszeniem ograniczeń przez unikalność na EmpCode
Zostawię cię, żebyś się martwił :).
1. Użyj scope_identity()
aby uzyskać ostatnio wstawiony identyfikator i użyć go do obliczenia EmpCode
.
Definicja tabeli:
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
)
Dodaj jeden wiersz do pracowników. Należy to zrobić w transakcji, aby mieć pewność, że nie zostaniesz z domyślną losową wartością z left(newid(), 10)
w 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. Utwórz EmpCode
kolumna obliczana
.
Definicja tabeli:
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
)
Dodaj jeden wiersz do pracowników:
insert into Employees (DistrictCode) values ('AB')