我正在使用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 numbering的zombat
的最佳答案,并且在我使用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
正常工作?
答案 0 :(得分:2)
如果您需要id
用于GUI(仅限演示文稿),您可以使用:
SELECT ROW_NUMBER() OVER(ORDER BY DateAdded) AS sequenceId, Name, DateAdded
FROM EmployeeTable
ORDER BY DateAdded;
修改强>
我正在尝试更新SequenceID,但它没有得到更新
您不应该每次都尝试重新排序表格。它没有意义。