sql >> Databáze >  >> RDS >> Sqlserver

udržování vlastního sloupce automatického přírůstku

Problém je v tom, že tam, kde se vkládá více řádků, používáte stejné další dostupné ID pro všechny řádky, budete muset přidat ROW_NUMBER() in, aby bylo zajištěno, že xid bylo v vložení jedinečné:

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];

S ohledem na zamezení duplicit můžete použít tabulkové tipy k uzamčení xtable při získání maximálního xid .

Nevýhodou použití těchto zámků je, že dojde k zablokování. V tomto sloupci byste měli mít jedinečné omezení/index, protože to zabrání duplikacím, ale také to povede k výjimkám, když je splněna podmínka sporu. Nakonec, ať si zvolíte jakoukoli metodu, budete muset přinést nějakou oběť.



  1. Najděte a nahraďte řetězec uvnitř BLOB for Work nebo souboru Excel

  2. Parametrizace dotazu ColdFusion

  3. Upozornění:Dělení nulou Práce na PHP a MySQL

  4. Co je T-SQL?