修改SQL中的队列序列

时间:2014-03-23 15:33:15

标签: sql-server-2008 queue

在SQL Server 2008中,我在FIFO队列中有一个“Q”表:

Person     Position
  23          1
  49          5
  108         2
  .           .
  .           .

因此,我当然可以使用

查看队列
  SELECT * FROM Q ORDER BY Position

我需要能够在队列中上下移动人员。我知道我可以在存储过程中执行RBAR,但是如果可能的话,我希望能够在单个查询中完成它。要求是

   move person 'x' to position y

即。在位置y的人之前移动'x'并将该人和后面的所有人移动到后面

算法是:

  1. 找到'x'的位置#
  2. 为每个人 - 除了'x' - 其位置是> ='y'增加位置一个
  3. 将'x'的位置设置为y。
  4. 有这样的疑问吗?

1 个答案:

答案 0 :(得分:0)

您有几种选择:

  • 链接列表(IdPrevId),但Position现在需要针对每项操作进行计算或重新计算
  • 双重链表(IdPrevIdNextId);与上述相同
  • positionfloat,当插入发生时,新position计算为前一个和下一个位置的平均值;但最终你将失去精确度,所以你必须通过更均匀地重新分配值来维持它

现在,回到你的问题。你说一个问题?不会发生。