T-SQL重新分配订单编号

时间:2010-05-27 23:08:48

标签: tsql

假设我有一个名为“ordernum”的字段的表,它表示给定行集的顺序。现在假设我删除了其中一行。什么类型的查询最适合重新分配订单号,以便它们保持顺序?

以下是一个例子:

  

id group_id name ordernum active
  的 ----------------------------------------------- ----
  0 0 ______________ _______________ '名1' __________ 5__________true
  1 _______________ 0 _______________ '名称2' __________ 4__________true
  2 _______________ 0 _______________ 'NAME3' __________ 3__________true
  3 _______________ 1 _______________ 'NAME4' __________ 2__________true
  4 _______________ 1 _______________ 'NAME5' _________ 1__________true
  5 _______________ 1 _______________ 'Name6' _________ NULL __________假

现在,如果我删除id ='4'的列,我将如何重置该特定组的'ordernum'字段中的值?这有可能吗?
或者如果我添加了一个新行。 (第一次创建行时,它们按日期排序,但用户可以选择自己设置顺序。)

在我的表设计中,我有一个列'active'布尔值。如果'active'设置为false,则'ordernum'设置为 NULL 。否则应该给出订单号。

1 个答案:

答案 0 :(得分:0)

您可以使用触发器进行删除:

update tbl
set ordernum = ordernum - 1
from deleted d
where d.active = 1
and group_id = d.group_id
and ordernum > d.ordernum

添加新行也不是什么大问题,但我不一定会使用触发器来插入。