2016-06-07 57 views
2

我的临时表有一列保存着连续的数字“行号”。删除记录后如何对列重新编号

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

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)' 
+0

相似的问题这里: http://stackoverflow.com/questions/230006/renumber-primary-key –

回答

0

在记录被删除后,您可以尝试类似下面的内容来对表格重新编号。

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 
+0

不幸的是行号是在VB中完成的,所以我无法像这样在SQL数据库中控制它。 –

+0

好的 - 你可以提供更多的细节问题,因为目前还不清楚你需要什么。 –

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

我建议你不要烦,因为行数都是easy to derive和滋扰维护。

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