TSQL 시퀀스를 에뮬레이트하는 저장 프로 시저를 만들어야합니다. 즉, 모든 호출에서 항상 고유 한 정수 값을 제공합니다. 또한 정수가 전달되면 결과가 더 높거나 다음으로 가장 높은 정수가없는 경우 해당 값을 반환해야합니다. 이 SP를 동시에 호출하는 클라이언트가 여러 명있을 수 있습니다.
MetaKey varchar (max) 및 MeatValueLong bigInt 열이있는 MetaInfo 테이블이 제공됩니다. 메타 키가 '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
내 질문은 단순히이 저장 프로 시저가 예상대로 작동합니까 (모든 발신자에게 고유 한 결과가 할당 됨)입니까?