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.