相关疑难解决方法(0)

通过存储过程模拟 TSQL 序列

我需要创建一个模拟 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
Run Code Online (Sandbox Code Playgroud)

我的问题很简单,这个存储过程是否按预期工作(所有调用者都将被分配一个唯一的结果)?

sql-server-2008

17
推荐指数
1
解决办法
1万
查看次数

标签 统计

sql-server-2008 ×1