SQL连续序列号被ORDER BY

时间:2017-10-09 17:12:24

标签: sql-server datagridview sequence

我正在使用Windows Form Application并访问SQL Server 2014中的数据库。我有EmployeeTable我从中检索数据,并显示DataGridView中的所有记录。在此表中,我有一个列SequenceID,它基本上从1增加到此表中的记录数,但这与AUTO INCREMENT更新SequenceID不同每次修改表时,无论插入新记录多少次或删除某些记录,都会保留数字顺序。例如,如果数据看起来像

SequenceID | Name
     1     | John
     2     | Mary
     3     | Robert
删除

Mary,然后生成的表格需要看起来像

SequenceID | Name
     1     | John
     2     | Robert

为了实现这一目标,我使用了来自Update SQL with consecutive numberingzombat的最佳答案,并且在我使用ORDER BY表达式之前它一直运行良好。

EmployeeTable也有DateAdded列,其中包含插入记录的日期。我需要显示此DateAdded列所排序的所有记录,其中最旧的记录显示在顶部,最新的记录显示在底部以及正确的SequenceID订单。但是,当删除记录并插入新记录时,它会搞砸。

如果我插入3条记录,

SequenceID | Name   | DateAdded
     1     | John   | 9/25/2017
     2     | Mary   | 9/26/2017
     3     | Robert | 9/27/2017

并删除Mary,它变为

SequenceID | Name   | DateAdded
     1     | John   | 9/25/2017
     2     | Robert | 9/27/2017
到目前为止,这是好事。但是,如果我添加另一条记录Tommy,比如9/28/2017,它应该添加到底部,因为它是最新的,它会产生类似的结果,

SequenceID | Name   | DateAdded
     1     | John   | 9/25/2017
     3     | Robert | 9/27/2017
     2     | Tommy  | 9/28/2017

ORDER BY工作正常,但它弄乱了SequenceID,我不确定为什么会发生这种情况。我所做的只是,

SELECT * 
FROM EmployeeTable 
ORDER BY DateAdded 

我尝试在此SQL命令之前和之后放置zombat的SQL命令,但都没有工作。在我看来,当我删除一行时,该行有一个不可见的点,并在那里插入一条新记录。

有没有办法解决这个问题,以便我可以按DateAdded 订购记录仍然让SequenceID正常工作?

1 个答案:

答案 0 :(得分:2)

如果您需要id用于GUI(仅限演示文稿),您可以使用:

SELECT ROW_NUMBER() OVER(ORDER BY DateAdded) AS sequenceId, Name, DateAdded
FROM EmployeeTable 
ORDER BY DateAdded;

修改

  

我正在尝试更新SequenceID,但它没有得到更新

您不应该每次都尝试重新排序表格。它没有意义。