在T-SQL更改排序顺序中使用偏移行
我最近发现,在使用“offset x rows”和“fetch next x rows only”和“order by”命令时,具有相同值的项可能会以不同的顺序出现 例如:在T-SQL更改排序顺序中使用偏移行,sql,tsql,sql-order-by,Sql,Tsql,Sql Order By,我最近发现,在使用“offset x rows”和“fetch next x rows only”和“order by”命令时,具有相同值的项可能会以不同的顺序出现 例如: SELECT * FROM Rows ORDER BY [IntegerField] OFFSET 0 ROWS Output: ID IntegerField 1 1 2 1 3 2 但只添加50行 SELECT * FROM Rows ORDER BY [IntegerField] OFFSET 0 R
SELECT * FROM Rows ORDER BY [IntegerField] OFFSET 0 ROWS
Output:
ID IntegerField
1 1
2 1
3 2
但只添加50行
SELECT * FROM Rows ORDER BY [IntegerField] OFFSET 0 ROWS FETCH NEXT 50 ROWS ONLY
Output:
ID IntegerField
2 1
1 1
3 2
在现实生活中,我使用GUID数据类型作为标识符,所以可能这就是这种奇怪行为的原因?我也有同样的问题,但在MSDN上发现了这个问题: 除非指定ORDERBY子句,否则不保证结果集中返回行的顺序
没有规定因为结果包含两次(或更多)相同的值,所以不能保证顺序,但我猜这是隐式的。可能不相关,但在第一个示例中,
3 2
行是打字错误还是两个示例之间有插入?除非列和/或表达式您在ORDER BY
子句中标识为所有行生成唯一值,那么具有相同值的所有行都可以按照服务器认为方便的任何顺序返回。如果您需要特定的订购,唯一可以保证的方法是在orderby
条款中详细说明订购要求。@tschmit007谢谢!这是我的错别字。我已经编辑了这篇文章。@Damien_不信者我知道已经有一段时间了,但是你应该把你的评论作为答案发表,这样我才能接受它。=)