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 server SQL Server:使用IN子句时返回行的顺序_Sql Server_Select_In Clause - Fatal编程技术网

Sql server SQL Server:使用IN子句时返回行的顺序

Sql server SQL Server:使用IN子句时返回行的顺序,sql-server,select,in-clause,Sql Server,Select,In Clause,运行以下查询将返回4行。正如我在SSMS中看到的,返回行的顺序与我在in子句中指定的相同 从ID位于4,3,2,1中的表中选择* 我是否可以说返回行的顺序始终与in子句中显示的相同 如果是,那么以下两个查询是否以相同的顺序返回行?正如我已经测试过的,命令是一样的,但我不知道我是否可以相信这种行为 按上次修改说明从表顺序中选择前10个* 从表中选择*,其中ID位于按LastModification DESC从表顺序中选择前10个ID 我问这个问题是因为我有一个非常复杂的select查询。在我的例子

运行以下查询将返回4行。正如我在SSMS中看到的,返回行的顺序与我在in子句中指定的相同

从ID位于4,3,2,1中的表中选择* 我是否可以说返回行的顺序始终与in子句中显示的相同

如果是,那么以下两个查询是否以相同的顺序返回行?正如我已经测试过的,命令是一样的,但我不知道我是否可以相信这种行为

按上次修改说明从表顺序中选择前10个* 从表中选择*,其中ID位于按LastModification DESC从表顺序中选择前10个ID
我问这个问题是因为我有一个非常复杂的select查询。在我的例子中,使用这个技巧可以使我的性能提高约30%。

除非使用order BY子句,否则无法保证记录的顺序。您可能会使用一些技巧,这些技巧在某些时候可能会起作用,但它们无法保证订单的准确性。

不,订单没有像《禁锢》中那样得到保证。我认为返回结果的顺序是基于主键列的,如果没有指定order by子句,我知道如果没有指定“order by”,则结果的顺序是不确定的,但是您能想象SQL server在in子句中以随机顺序处理这些值吗?在我的例子中,这个ID是主要的keySQL服务器,它可以根据需要处理记录;这甚至取决于物理文件布局。您永远不应该采用任何隐式顺序—既不按主键也不按聚集索引。第二组查询可以按不同顺序返回记录;但是,您可以向外部查询添加额外的order by。@我知道,对于select查询,Zsolt会看到这一点。但我不确定IN子句是否也是如此,因为当你使用IN子句时,你明确定义了值的顺序,比如“IN 4,3,2,1”。结果很可能会以相同的顺序返回,无论你是以1,2,3,4还是以4,3,2,1或IN中的任何其他顺序返回。@user1640463:As@Szymon说,获得特定顺序记录的唯一保证方法是使用order BY。您的样品使用。。。在4,3,2,1中,不保证按该顺序返回行。如果你依赖它,当它不再工作时,你迟早会遇到麻烦……不幸的是,你是对的!至少在我刚刚尝试过的测试中,引擎会以PK的顺序返回行,但这并不能保证。非常感谢。