SQL偏移量在SQL Server中丢失其顺序
我有一个排序的临时表,名为MyEntable 排序不仅基于特定列,还基于许多其他因素 现在我想使用偏移量进行分页SQL偏移量在SQL Server中丢失其顺序,sql,sql-server,sql-order-by,offset,Sql,Sql Server,Sql Order By,Offset,我有一个排序的临时表,名为MyEntable 排序不仅基于特定列,还基于许多其他因素 现在我想使用偏移量进行分页 OFFSET @PageSize*(@PageNumber-1) Row Fetch Next @PageSize Rows Only 但如果我在我的临时表上这样做,如下所示 Select * from #MytempTable ORDER BY ( SELECT NULL) OFFSET @PageSize*(@PageNumber-1) Row Fetch Next @Pa
OFFSET @PageSize*(@PageNumber-1) Row Fetch Next @PageSize Rows Only
但如果我在我的临时表上这样做,如下所示
Select *
from #MytempTable
ORDER BY ( SELECT NULL) OFFSET
@PageSize*(@PageNumber-1) Row Fetch Next @PageSize Rows Only
我在临时桌上的订单丢了
我希望保留临时表在偏移量之后的顺序。除非在查询中指定order By,否则在结果集中永远不能保证顺序。 即使您希望结果集按聚集键排序,由于许多因素,结果集也可能不会按该顺序返回
在您的情况下,我认为您可以添加一个新的identityauto填充列到临时表中,并且在选择时,您应该使用Order By子句来使用该列,而不是Order By select null。除非在查询中指定Order By,否则结果集中永远不能保证顺序。 即使您希望结果集按聚集键排序,由于许多因素,结果集也可能不会按该顺序返回 在您的情况下,我认为您可以添加一个新的identityauto填充列到临时表中,在选择时,您应该将该列与Order By子句一起使用,而不是Order By select null。表上没有顺序。甚至不在临时桌上 这是SQL的一个基本原则:没有ORDER BY的表和结果集表示无序集。时期使用数据中的列在数据中捕获排序信息 没有ORDER BY的结果集可以按任何顺序返回,并在后续执行时按不同顺序返回 当您通过SELECT NULL添加订单时,您明确表示:我必须在这里下订单,但我不关心订单。这延伸到:我不在乎在随后的处决中是否也是如此 使用标识列创建临时表时,可以保留顺序。例如:
select identity(int) as temp_id, . . .
into #temp
from . . .
order by <whatever you want here>;
然后,您可以在查询表时使用order by temp_id恢复排序。表上没有订单。甚至不在临时桌上
这是SQL的一个基本原则:没有ORDER BY的表和结果集表示无序集。时期使用数据中的列在数据中捕获排序信息
没有ORDER BY的结果集可以按任何顺序返回,并在后续执行时按不同顺序返回
当您通过SELECT NULL添加订单时,您明确表示:我必须在这里下订单,但我不关心订单。这延伸到:我不在乎在随后的处决中是否也是如此
使用标识列创建临时表时,可以保留顺序。例如:
select identity(int) as temp_id, . . .
into #temp
from . . .
order by <whatever you want here>;
然后,您可以在查询表时使用order by temp_id恢复订单。您使用的是哪种产品?SQL只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加。你用的是什么产品?SQL只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加。但这里有一个订单。SQL Server在使用FETCH时需要它。@GordonLinoff-是的,根据我的回答,我们需要带有标识列的order by。但是有一个order by。SQL Server在使用FETCH时需要它。@GordonLinoff-是的,根据我的回答,我们需要order by with Identity列。