Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Obsługa max(ID) w środowisku współbieżnym

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przegląd schematu serwera SQL

  2. SQL WYBIERANIE WIERSZ

  3. Jak sprawdzić, na ile procedur składowanych wpłynie po usunięciu jednej tabeli w SQL?

  4. Jak naprawić komunikat o błędzie 7325 w programie SQL Server:„Obiekty eksponujące kolumny z typami CLR nie są dozwolone w kwerendach rozproszonych”

  5. Usługi raportowania SQL Server 2005:Jak zliczyć wiersze, które nie mają wartości NULL? Jakieś wskazówki dotyczące obliczania sum?