小编Hog*_*gan的帖子

通过存储过程模拟 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 中删除临时表有什么好处(如果有的话)?

例如:

DROP TABLE #temp;
Run Code Online (Sandbox Code Playgroud)

由于服务器会自动删除临时表,因此该语句似乎不起作用。

sql-server

6
推荐指数
2
解决办法
2901
查看次数

标签 统计

sql-server ×1

sql-server-2008 ×1