Ето два начина да правите това, което искате. Фактът, че може да се окажете с уникално нарушение на ограничението на EmpCode
Ще ви оставя да се тревожите :).
1. Използвайте scope_identity()
за да получите последния вмъкнат ID и да го използвате за изчисляване на EmpCode
.
Дефиниция на таблица:
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
)
Добавете един ред към Служители. Трябва да се направи в транзакция, за да сте сигурни, че няма да останете с произволната стойност по подразбиране от left(newid(), 10)
в 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. Направете EmpCode
изчислена колона
.
Дефиниция на таблица:
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
)
Добавете един ред към Служители:
insert into Employees (DistrictCode) values ('AB')