Tsql T-SQL使用存储过程在记录中设置旋转标志(真/假)
对于我正在创建的应用程序,我可以使用C#中的多个命令来实现这一点,但更喜欢使用存储过程来消除延迟/锁定等问题(希望如此): 我有一个包含10个扩展名(重要字段)的表: 已使用排序器、扩展名 第一条记录将设置为IsUsed=true 调用存储过程时,我需要按排序顺序将下一条记录的IsUsed设置为true,将true的当前记录设置为false。当我点击最后一条记录时,旋转回到第一条记录 用例:我需要在一组可用数字中循环。多人使用该应用程序,因此无法重复使用。最后4分钟内的一个数字(10人银行就足够了,但如有必要,我们可以延长)。当用户请求一个号码时,他们将获得下一个可用号码。我可以根据需要构建这个表,所以任何和所有实现用例的选项都是受欢迎的。 调用存储过程时,我需要在第一条记录上将标志设置为true。所有其他记录都应该是假的 我已经看到了这一点,这很有趣,但没有完全回答:Tsql T-SQL使用存储过程在记录中设置旋转标志(真/假),tsql,stored-procedures,Tsql,Stored Procedures,对于我正在创建的应用程序,我可以使用C#中的多个命令来实现这一点,但更喜欢使用存储过程来消除延迟/锁定等问题(希望如此): 我有一个包含10个扩展名(重要字段)的表: 已使用排序器、扩展名 第一条记录将设置为IsUsed=true 调用存储过程时,我需要按排序顺序将下一条记录的IsUsed设置为true,将true的当前记录设置为false。当我点击最后一条记录时,旋转回到第一条记录 用例:我需要在一组可用数字中循环。多人使用该应用程序,因此无法重复使用。最后4分钟内的一个数字(10人银行就足够
如果您使用它的目的只是返回一个数字来标识会话,我建议放弃整个表的想法,让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服务返回列表中用于转接呼叫的下一个号码。因此,我认为上述方法行不通。