我需要创建一个模拟TSQL序列的存储过程。就是说,它总是在每次调用时提供递增的不同整数值。另外,如果传入一个整数,则在没有结果大于或没有下一个最大整数的情况下,应返回该值。不用说可以有多个客户端同时调用此SP。
给定具有列MetaKey varchar(max)和MeatValueLong bigInt的表MetaInfo。预期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
我的问题很简单,此存储过程是否按预期工作(将为所有调用方分配唯一的结果)?
@all:仅供参考,在此Q上生成以下代码:stackoverflow.com/q/6342732/27535
—
gbn