Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Xử lý tối đa (ID) trong môi trường đồng thời

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server thoát một gạch dưới

  2. Không hiểu hành vi làm tròn trong máy chủ sql khi sử dụng toán tử phân chia

  3. Có sự khác biệt nào giữa DECIMAL và NUMERIC trong SQL Server không?

  4. Có cách nào để chèn hoặc cập nhật SQLBulkCopy nếu tồn tại không?

  5. Thêm gợi ý truy vấn khi gọi Hàm Table-Valued