SQL 服务器 Select 以相同的顺序插入
SQL Server Select in Same Order Inserted
我有以下table情况
- 电影(int movieId PK)
- Cast (int castId PK)
- MovieHasCast (movieId, castId 唯一约束)
当我插入演员表时,它们会按特定顺序插入(即它们会出现在 IMDB 上)。但是,当我执行 select 时,它们似乎以不同的顺序返回。
我的问题有两点。
- 我有一个 Equals 方法由于顺序而失败,不想实现额外的代码来处理乱序的名称,并且
- 出于 "top billing" 的目的,确实应该保持顺序,即主要或最知名的演员首先出现。显然,这不会在 Cast 或 Movie table 上完成,而且我认为我从未听说过任何人在关系 table 上拥有 Identity 或 Sequence 列。
所以我想知道:
- 为什么他们不按插入的顺序返回给我
- 是我唯一的解决方案是在关系table上添加一个额外的列(无论是排名值还是标识列并进行排序)
与 Stack Overflow 上的 has been asked and answered before 一样,您无法按照插入记录的相同顺序取出记录。更具体地说,SQL 服务器引擎不提供此类保证。这样做的原因是您的数据库引擎需要自由地存储那些插入的记录,以达到高效和最佳的效果。
如果你想在插入时保持顺序,你可以创建一个自增列。该栏会记录演员的插入顺序,您可以查询出原始顺序。
我有以下table情况
- 电影(int movieId PK)
- Cast (int castId PK)
- MovieHasCast (movieId, castId 唯一约束)
当我插入演员表时,它们会按特定顺序插入(即它们会出现在 IMDB 上)。但是,当我执行 select 时,它们似乎以不同的顺序返回。
我的问题有两点。
- 我有一个 Equals 方法由于顺序而失败,不想实现额外的代码来处理乱序的名称,并且
- 出于 "top billing" 的目的,确实应该保持顺序,即主要或最知名的演员首先出现。显然,这不会在 Cast 或 Movie table 上完成,而且我认为我从未听说过任何人在关系 table 上拥有 Identity 或 Sequence 列。
所以我想知道:
- 为什么他们不按插入的顺序返回给我
- 是我唯一的解决方案是在关系table上添加一个额外的列(无论是排名值还是标识列并进行排序)
与 Stack Overflow 上的 has been asked and answered before 一样,您无法按照插入记录的相同顺序取出记录。更具体地说,SQL 服务器引擎不提供此类保证。这样做的原因是您的数据库引擎需要自由地存储那些插入的记录,以达到高效和最佳的效果。
如果你想在插入时保持顺序,你可以创建一个自增列。该栏会记录演员的插入顺序,您可以查询出原始顺序。