Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 使用按ID排序的行号()选择行_Sql_Sql Server_Database_Sql Server 2008 R2_Row Number - Fatal编程技术网

Sql 使用按ID排序的行号()选择行

Sql 使用按ID排序的行号()选择行,sql,sql-server,database,sql-server-2008-r2,row-number,Sql,Sql Server,Database,Sql Server 2008 R2,Row Number,我试图在特定行号之间选择行(如1到50或51到10等) 下面是我的表MatTkschema,所有列都允许空值: tk_id [varchar(50)] | mat_id [varchar(50)] | ven_id [varchar(50)] | tk_rate [money] 1023 104 2212 120.11 本文建议按id排序,但我希望避免这种情况,并以表数据的自然顺

我试图在特定行号之间选择行(如1到50或51到10等)

下面是我的表
MatTk
schema,所有列都允许空值:

tk_id [varchar(50)] | mat_id [varchar(50)] | ven_id [varchar(50)] | tk_rate [money]
   1023                     104                     2212               120.11 

本文建议按id排序,但我希望避免这种情况,并以表数据的自然顺序显示它

还可以查看这篇文章,它建议插入临时表,但这不是一个选项,因为
MatTk
表有数百万行

有没有一种方法可以在不按ID排序和不创建临时表的情况下按行号查询行


本文使用Row_Number()选择行的子集建议按id排序,但我希望避免这种情况,并以表数据的自然顺序显示它


没有“表数据的自然顺序”这样的东西。
数据库表本质上是无序的。

这意味着从select语句返回的行(没有
order by
子句)是任意排序的(请注意,任意与随机不同)。 有关更多信息,请阅读Michael J.Swart的

如果不关心
行数
函数中的数字顺序,可以使用

row_number() over(order by (select null))
但是,请注意,使用它将返回任意行号,这意味着不能相信它们在每次运行查询时都保持不变


本文使用Row_Number()选择行的子集建议按id排序,但我希望避免这种情况,并以表数据的自然顺序显示它


没有“表数据的自然顺序”这样的东西。
数据库表本质上是无序的。

这意味着从select语句返回的行(没有
order by
子句)是任意排序的(请注意,任意与随机不同)。 有关更多信息,请阅读Michael J.Swart的

如果不关心
行数
函数中的数字顺序,可以使用

row_number() over(order by (select null))

但是,请注意,使用此选项将返回任意行号-这意味着不能相信它们在每次运行查询时都保持不变。

您必须按某个内容排序-您希望按哪一列排序?排序依据(选择null)“表数据的自然顺序”。我认为您不理解关系数据库中的一个基本概念。桌子乱七八糟。没有排序依据的结果集是无序的。集合没有“自然顺序”。不,不会发生。根据定义,表是无序集。当我们选择数据时,顺序的概念就出现了。即使是@JohnCappelletti的“黑客”也不会长期奏效。在你认为这是一个有效的方法,以确保订购的链接我张贴在上面。它将工作一段时间,但在某个时候它将不再工作。您必须按某种方式排序-您要按什么列排序?按顺序(选择null)“表数据的自然顺序”。我认为您不理解关系数据库中的一个基本概念。桌子乱七八糟。没有排序依据的结果集是无序的。集合没有“自然顺序”。不,不会发生。根据定义,表是无序集。当我们选择数据时,顺序的概念就出现了。即使是@JohnCappelletti的“黑客”也不会长期奏效。在你认为这是一个有效的方法,以确保订购的链接我张贴在上面。它会工作一段时间,但在某个时候它将不再工作。这种方法的问题是,每次运行的结果不一定相同。如果将此方法用于更新或删除之类的操作,则无法保证受影响的行与原始选择中的行相同。您需要选择要按其排序的列。如果
id
是一个标识列,那么它就是你最好的选择。@JeremiahCooper这就是我回答的全部要点。。。我明白我需要说得更清楚些。这种方法的问题是每次运行结果不一定相同。如果将此方法用于更新或删除之类的操作,则无法保证受影响的行与原始选择中的行相同。您需要选择要按其排序的列。如果
id
是一个标识列,那么它就是你最好的选择。@JeremiahCooper这就是我回答的全部要点。。。我明白我需要说得更清楚些。编辑。