Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Обработка на max(ID) в едновременна среда

Ето два начина да правите това, което искате. Фактът, че може да се окажете с уникално нарушение на ограничението на 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')


  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 Agent, които са изброени в SQL таблица

  2. Как да промените името на таблица с помощта на SQL заявка?

  3. SQL - как да генерирам редове за всеки месец въз основа на диапазони от дати в съществуващ набор от данни?

  4. Какво е DTU в Azure SQL база данни и как да разберем колко ни трябва

  5. SSIS Job Scheduler не работи, но работи добре в BIDS и в услугите за интегриране на MSDB