У мене є вимога створити збережену процедуру, яка імітує послідовність TSQL. Тобто воно завжди дає все більше зростаюче ціле значення для кожного виклику. Крім того, якщо введено ціле число, воно повинно повернути це значення, якщо ніколи не було результату більше або наступне найвище ціле число. Само собою зрозуміло, що може бути декілька клієнтів, які дзвонять цим ІП одночасно.
Дано таблицю MetaInfo зі стовпчиками MetaKey varchar (max) та MeatValueLong bigInt. Очікується, що рядок з MetaKey 'Internal-ID-Last' буде містити останнє найвище значення, призначене. Я створив таку збережену процедуру:
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
Моє запитання просто, чи працює ця збережена процедура як очікувалося (всім абонентам буде призначений унікальний результат)?