【问题标题】:How renumber a column after deleting a record删除记录后如何重新编号列
【发布时间】:2016-10-07 00:24:45
【问题描述】:

我的临时表有一列包含一个连续的数字“行号”。

当从表中删除记录时,如何创建更新此“行号”列?

例子

ID    Name    Row_Number
1     Jack    1
14    John    2
17    Bella   3

如果我删除 ID=14 的记录,我希望将 ID=17 的记录更新为 row_number 2

我试过了:

SET @deletestr = ' DELETE FROM  ' + @tablename
        + ' where isnull(ltrim(rtrim([Row_Number])),0)=isnull(ltrim(rtrim(@originalRow_Number)),0)'

【问题讨论】:

标签: mysql sql asp.net vb.net


【解决方案1】:

我建议您不要打扰,因为行号是easy to derive,维护起来很麻烦。

针对您的问题的任何 SQL 解决方案都将涉及自联接,因为这是查找下一个最小值的方法。通过使用 Select 生成行号,您可以节省一些工作和服务器更新列的开销。

【讨论】:

    【解决方案2】:
    SET @deletestr = ' DELETE FROM  ' + @tablename
                + ' where isnull(ltrim(rtrim([Row_Number])),0)=isnull(ltrim(rtrim(@originalRow_Number)),0)'
    

    【讨论】:

      【解决方案3】:

      在删除记录后,您可以尝试以下方法来重新编号表格。

      UPDATE x
      SET x.row_number = x.new_row_number
      FROM ( 
          SELECT ROW_NUMBER() OVER (Order by Id) AS new_row_number, row_number    
          FROM @tableName
      ) x
      

      【讨论】:

      • 不幸的是,行号是在 VB 中完成的,所以我无法像这样在 SQL 数据库中控制它。
      • 好的 - 您能否提供更详细的问题,因为目前尚不清楚您需要什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多