Tsql T-SQL使用存储过程在记录中设置旋转标志(真/假)

Tsql T-SQL使用存储过程在记录中设置旋转标志(真/假),tsql,stored-procedures,Tsql,Stored Procedures,对于我正在创建的应用程序,我可以使用C#中的多个命令来实现这一点,但更喜欢使用存储过程来消除延迟/锁定等问题(希望如此): 我有一个包含10个扩展名(重要字段)的表: 已使用排序器、扩展名 第一条记录将设置为IsUsed=true 调用存储过程时,我需要按排序顺序将下一条记录的IsUsed设置为true,将true的当前记录设置为false。当我点击最后一条记录时,旋转回到第一条记录 用例:我需要在一组可用数字中循环。多人使用该应用程序,因此无法重复使用。最后4分钟内的一个数字(10人银行就足够

对于我正在创建的应用程序,我可以使用C#中的多个命令来实现这一点,但更喜欢使用存储过程来消除延迟/锁定等问题(希望如此):

我有一个包含10个扩展名(重要字段)的表: 已使用排序器、扩展名

第一条记录将设置为IsUsed=true

调用存储过程时,我需要按排序顺序将下一条记录的IsUsed设置为true,将true的当前记录设置为false。当我点击最后一条记录时,旋转回到第一条记录

用例:我需要在一组可用数字中循环。多人使用该应用程序,因此无法重复使用。最后4分钟内的一个数字(10人银行就足够了,但如有必要,我们可以延长)。当用户请求一个号码时,他们将获得下一个可用号码。我可以根据需要构建这个表,所以任何和所有实现用例的选项都是受欢迎的。 调用存储过程时,我需要在第一条记录上将标志设置为true。所有其他记录都应该是假的

我已经看到了这一点,这很有趣,但没有完全回答:


如果您使用它的目的只是返回一个数字来标识会话,我建议放弃整个表的想法,让SQL Server为您完成这项工作

您可以创建一个循环并返回下一个值的对象,而无需编写任何代码或维护任何表

CREATE SEQUENCE dbo.Extension 
    AS integer
    START WITH 5  
    INCREMENT BY 5
    MINVALUE 5 
    MAXVALUE 50
    CYCLE;  
这将在第一次呼叫时返回号码5,在呼叫号码10时返回号码50,然后重新开始。不过,您可以调整代码中的数字,或多或少地执行您想执行的操作

按如下方式获取下一个值:

SELECT NEXT VALUE FOR dbo.Extension;
以及何时/如果需要扩展范围:

ALTER SEQUENCE dbo.Extension
     MAXVALUE 100;
玩弄这个想法

编辑:考虑到上面和下面的评论,我仍然坚持使用
序列
,我认为

每次代码调用扩展的表时,请按照以下行使用查询:

SELECT 
  Extension
FROM 
  ExtTable
WHERE
  SortOrder = NEXT VALUE FOR dbo.Extension;

从功能上讲,这应该完成您所追求的,同样没有代码要编写或维护

那么,你只是在这里返回一个整数值吗?欢迎来到堆栈溢出,蒂姆。你目前的逻辑是什么样的?把你正在使用的代码包括进来是很有用的。除此之外,我想问题在于你希望代码有多简洁和高效。我可以想出一些简单的方法,在存储过程中通过一些查询和条件来实现这一点,但是如果你想把它简化为一个查询,那就需要一些创造性。用户是否可以将一个值保留足够长的时间,以至于你需要在下一轮中跳过它,因为它仍然“在使用中”?@EricBrandt返回的号码是一个字符串,因为分机是一个电话号码,可能是0442。电话系统中配置了10个号码的列表,但我需要将它们旋转50次。我需要旋转10个静态电话分机,因此“下一个可用”必须来自该静态列表。50名客户服务代表,单击呼叫web服务的按钮,该web服务返回列表中用于转接呼叫的下一个号码。因此,我认为上述方法行不通。