【问题标题】:SQL Consecutive Sequence Number gets messed up with ORDER BYSQL 连续序列号被 ORDER BY 弄乱了
【发布时间】:2018-03-20 23:18:40
【问题描述】:

我正在开发 Windows 窗体应用程序,它访问 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

到目前为止,这还不错。但是,如果我在 9/28/2017 上添加另一条记录 Tommy,因为它是最新的,所以应该添加到底部,它会产生类似的结果,

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 工作正常?

【问题讨论】:

  • 当您通过DateAdded 订购时,您订购的是DateAdded 而不是SequenceId
  • 我知道。我想要做的是,通过DateAdded 订购它们,然后更新SequenceID。我正在尝试更新SequenceID,但它没有得到更新..

标签: sql-server datagridview sequence


【解决方案1】:

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

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

编辑:

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

您不应该每次都尝试重新排列您的餐桌。这没有意义。

【讨论】:

  • 谢谢。当我刚刚尝试时,您的 SQL 命令似乎正在运行。我所做的是,在通过删除/添加行修改表后,我运行zombat的SQL命令来修复SequenceID,但它不起作用。
  • 实际上它不起作用..您提供的这个SQL命令似乎暂时改变了SequenceID的显示顺序,但实际sequenceID在表中没有改变。当我试图删除某个SequenceID 的一行时,它删除了一个完全不同的行,实际上有那个sequenceID
  • 实际上我是通过添加一个新列来弄清楚的。感谢您的知识!
猜你喜欢
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多