Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

mempertahankan kolom kenaikan otomatis khusus

Masalahnya adalah di mana Anda memiliki beberapa baris yang dimasukkan, Anda menggunakan ID yang tersedia berikutnya yang sama untuk semua baris, Anda harus menambahkan ROW_NUMBER() in untuk memastikan xid unik di sisipan:

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

Berkenaan dengan mencegah duplikat, Anda dapat menggunakan petunjuk tabel untuk mengunci xtable saat mendapatkan xid maksimum .

Kelemahan menggunakan kunci ini adalah Anda akan menemui jalan buntu. Anda harus memiliki batasan/indeks unik pada kolom ini karena ini akan mencegah duplikat, namun juga akan menghasilkan pengecualian ketika kondisi balapan terpenuhi. Pada akhirnya, metode apa pun yang Anda pilih, Anda perlu membuat semacam pengorbanan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Anda melacak waktu baris yang direplikasi untuk Pelanggan di SQL Server 2005?

  2. Apakah ada cara untuk mempertahankan variabel di perjalanan?

  3. Apa spesifikasi format Tanggal Heksadesimal di SQL server?

  4. Di kolom apa indeks berkerumun harus diletakkan?

  5. Bagaimana cara menghapus dari beberapa tabel menggunakan INNER JOIN di SQL server