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

поддържане на персонализирана колона за автоматично нарастване

Проблемът е, че когато вмъквате няколко реда, използвате един и същ следващ наличен идентификатор за всички редове, трябва да добавите ROW_NUMBER() в, за да се гарантира, че xid е уникален във вмъкването:

insert into [xtable] (XID)
select [x].[NextavailableID] + ROW_NUMBER() OVER (ORDER BY i.ID)
from inserted [i]
cross apply
(
  select coalesce(max([t].[XID]), 0) [NextavailableID]
  from [xtable] [t] WITH (TABLOCK, HOLDLOCK)
) [x];

По отношение на предотвратяването на дублиране можете да използвате съвети за таблица, за да заключите xtable при получаване на максималния xid .

Недостатъкът на използването на тези ключалки е, че ще получите блокиране. Трябва да имате уникално ограничение/индекс в тази колона, тъй като това ще предотврати дублирането, но също така ще доведе до изключения, когато е изпълнено условие за състезание. В крайна сметка, какъвто и метод да изберете, ще трябва да направите някаква жертва.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите първия запис от всяка група от резултата, извлечен с помощта на група по команда

  2. SQL Server Circle

  3. как да шифровате колоната с парола

  4. 5 начина да коригирате грешката „Деление на нула“ в SQL Server (Msg 8134)

  5. SQL Server добавя първичен ключ за автоматично увеличение към съществуващата таблица