Bir TSQL dizisi taklit saklı yordam oluşturmak için bir gereksinim var. Yani her çağrıda her zaman artan bir tamsayı değeri verir. Ayrıca, bir tamsayı iletilirse, daha büyük bir sonuç veya bir sonraki en yüksek tamsayı hiç bulunmamışsa bu değeri döndürmelidir. Bu SP'yi aynı anda çağıran birden fazla müşteri olabileceğini söylemeye gerek yok.
MetaKey varchar (max) ve MeatValueLong bigInt sütunları içeren bir tablo MetaInfo verildi. 'Internal-ID-Last' MetaKey satırının, atanan son en yüksek değeri içermesi beklenir. Aşağıdaki saklı yordamı oluşturdum:
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
Sorum şu: Bu saklı yordam beklendiği gibi çalışıyor mu (tüm arayanlara benzersiz bir sonuç atanacak)?