Saya memiliki persyaratan untuk membuat prosedur tersimpan yang mengemulasi urutan TSQL. Itu selalu memberikan peningkatan nilai integer yang berbeda pada setiap panggilan. Selain itu, jika bilangan bulat dilewatkan di dalamnya harus mengembalikan nilai itu jika tidak pernah ada hasil yang lebih besar atau bilangan bulat tertinggi berikutnya yang tersedia. Tak perlu dikatakan bahwa ada beberapa klien yang memanggil SP ini pada saat yang sama.
Diberikan tabel MetaInfo dengan kolom MetaKey varchar (max) dan MeatValueLong bigInt. Diharapkan baris dengan MetaKey 'Internal-ID-Last' akan berisi nilai tertinggi terakhir yang diberikan. Saya membuat prosedur tersimpan berikut:
CREATE PROCEDURE [dbo].[uspGetNextID]
(
@inID bigInt
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION
UPDATE MetaInfo WITH (ROWLOCK)
SET MetaValueLong = CASE
WHEN ISNULL(MetaValueLong,0) > @inID THEN MetaValueLong+1
ELSE @inID+1
END
WHERE MetaKey = 'Internal-ID-Last'
SELECT MetaValueLong
FROM MetaInfo
WHERE MetaKey = 'Internal-ID-Last'
COMMIT TRANSACTION
END
Pertanyaan saya sederhana, apakah prosedur tersimpan ini berfungsi seperti yang diharapkan (semua penelepon akan diberikan hasil yang unik)?