Đây là hai cách để làm những gì bạn muốn. Thực tế là bạn có thể bị vi phạm ràng buộc duy nhất trên EmpCode
Tôi sẽ để bạn lo lắng về :).
1. Sử dụng scope_identity()
để lấy ID được chèn cuối cùng và sử dụng ID đó để tính toán EmpCode
.
Định nghĩa bảng:
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
)
Thêm một hàng cho Nhân viên. Nên thực hiện trong một giao dịch để đảm bảo rằng bạn sẽ không bị bỏ lại với giá trị ngẫu nhiên mặc định từ left(newid(), 10)
trong 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. Tạo EmpCode
cột được tính
.
Định nghĩa bảng:
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
)
Thêm một hàng vào Nhân viên:
insert into Employees (DistrictCode) values ('AB')