Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL偏移量在SQL Server中丢失其顺序_Sql_Sql Server_Sql Order By_Offset - Fatal编程技术网

SQL偏移量在SQL Server中丢失其顺序

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

我有一个排序的临时表,名为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 @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列。